home *** CD-ROM | disk | FTP | other *** search
/ Java Developer's Companion / Java Developer's Companion.iso / Javacup / INGZP26A.TAR / internet / INGZP26A / Map.java < prev    next >
Encoding:
Java Source  |  1996-05-21  |  73.0 KB  |  2,485 lines

  1. /* $Id: Map.java,v 1.7 1996/03/31 11:43:02 djun Exp djun $
  2.  
  3.    File: Map.java
  4.  
  5.    Implements the Map itself as a class.
  6.  
  7.    Notes:  this class is currently coded by hand, with some automation.
  8.    A parallel project is working to create an application to allow 
  9.    people to create similar classes, starting from a GIF or JPEG encoded 
  10.    map.
  11.  
  12.    Author: Djun M. Kim
  13.    Copyright (c) 1996 Djun M. Kim.  All rights reserved.
  14.  
  15. */
  16.  
  17.  
  18. import java.awt.*;
  19. import java.net.URL;
  20. import java.util.*;
  21. import java.lang.Math;
  22. import Location;
  23. import MapError;
  24. import Route;
  25.  
  26. public class Map {
  27.  
  28.     private static final int cellsize = 5;
  29.     private static final String mapImageSrc = "map.gif";
  30.     private static final String maptitle = "University of British Columbia";
  31.     private static Hashtable LocationsByKeyword = new Hashtable();
  32.     private static Hashtable LocationsByName = new Hashtable();
  33.     private Location[][] location;            // Array of locations
  34.  
  35.     public static final int MaxScale = 200;    // max scale factor, percent
  36.     public static final int MinScale = 100;    // min scale factor, percent
  37.     public static final int XSIZE = 591;
  38.     public static final int YSIZE = 451;
  39.     public static final int NXLOCS = XSIZE/cellsize + 1;
  40.     public static final int NYLOCS = YSIZE/cellsize + 1;
  41.  
  42.     public Image mapimage;
  43.  
  44.     MapError error_handler = new MapError();
  45.  
  46.     /*------------------------------------------------------------
  47.                  Access methods
  48.       ------------------------------------------------------------*/
  49.  
  50.     // Return the location corresponding to a given coordinate
  51.     public Location getLocation(int x, int y) {
  52.     return(location[x/cellsize][y/cellsize]);
  53.     }
  54.  
  55.     public String getImageSrc() {
  56.     return mapImageSrc;
  57.     }
  58.  
  59.     public String getTitle() {
  60.     return maptitle;
  61.     }
  62.  
  63.     /*------------------------------------------------------------
  64.                  Keyword searching
  65.       ------------------------------------------------------------*/
  66.  
  67.     // Returns the index of String pattern in the String target if 
  68.     // pattern contained in target; matching is done in case-insensitive 
  69.     // manner if ignoreCase is true.  Uses a brute-force algorithm.
  70.     // Returns -1 if there is no containment. (Should perhaps use exceptions)
  71.     // This should be part of a class extending String, but String is final...
  72.  
  73.     public int contains(String pattern, String target, boolean ignoreCase) {
  74.     char[] pat; 
  75.     char[] targ;
  76.     if (ignoreCase) {
  77.         pat =  pattern.toLowerCase().toCharArray();
  78.         targ = target.toLowerCase().toCharArray();
  79.     } else {
  80.         pat  = pattern.toCharArray();
  81.         targ = target.toCharArray();
  82.     }
  83.     int patlen = pattern.length();
  84.     int targlen = target.length();
  85.  
  86.     int i = 0; int j = 0;
  87.     do {
  88.         if (targ[i] == pat[j]) {
  89.         i++; j++;
  90.         } else {
  91.         i = i - j + 1;
  92.         j = 0;
  93.         }
  94.     } while (j < patlen && i < targlen);
  95.     if (j >= patlen) {
  96.         return(i - patlen);
  97.     } else {
  98.         return(-1);
  99.     }
  100.     }
  101.  
  102.     // Return a vector of locations matching the given string
  103.     public Vector findLocationsByKeyword(String s) {
  104.     Vector locn_vec = new Vector();
  105.     String key;        
  106.     for (Enumeration enum = LocationsByKeyword.keys();
  107.          enum.hasMoreElements(); ) {
  108.         key  = (String) enum.nextElement();
  109.         if (contains(s, key, true) != -1) {        
  110.         for (Enumeration vec_enum = 
  111.             ((Vector)(LocationsByKeyword.get(key))).elements(); 
  112.             vec_enum.hasMoreElements(); ) {
  113.             Location loc = (Location)vec_enum.nextElement();
  114.             if (!locn_vec.contains(loc)) {
  115.             locn_vec.addElement(loc);
  116.             }
  117.             }
  118.         }
  119.     }    
  120.     return(locn_vec);
  121.     }
  122.  
  123.  
  124.     // Register a keyword in the dictionary of keywords/locations
  125.     public void registerKeyword(String s, Location loc) {
  126.     Vector loc_vec = (Vector) LocationsByKeyword.get(s);
  127.     if (loc_vec == null) { // not in Hashtable, create new entry
  128.         loc_vec = new Vector();
  129.         loc_vec.addElement(loc);
  130.     } else { // add given loc to list of locations in loc_vec
  131.         loc_vec.addElement(loc);
  132.     };
  133.     try {
  134.         LocationsByKeyword.put(s, loc_vec);
  135.     } catch (java.lang.NullPointerException e) {
  136.         error_handler.display("Error registering keyword in map: " + 
  137.         e.getMessage());
  138.     }
  139.     }    
  140.  
  141.     // Register a location in the dictionary of location names/locations
  142.     // Silently overwrites existing entries with same key.
  143.     public void registerLocation(String s, Location loc) {
  144.     try {
  145.         LocationsByName.put(s, loc);
  146.     } catch (java.lang.NullPointerException e) {
  147.         error_handler.display("Error registering location in map: " + 
  148.         e.getMessage());
  149.     }
  150.     }    
  151.  
  152.     // Get a location by location name from the dictionary of names/locations
  153.     public Location getLocationByName(String s) {
  154.     return((Location)LocationsByName.get(s));
  155.     }
  156.  
  157.     // Initialize all of the locations which the region r covers
  158.     // (i.e. the center of the cell is contained in the region)
  159.     // to the value of location loc.
  160.     public void initLocsFromRegion(Location loc, Region r) {
  161.     Rectangle bb = r.perim.getBoundingBox();
  162.     int start_row = Math.max(0, bb.x/cellsize - 1);
  163.     int start_col = Math.max(0, bb.y/cellsize - 1);    
  164.     int end_row = Math.min(NXLOCS, start_row + Math.max(cellsize, bb.width)/cellsize + 1);
  165.     int end_col = Math.min(NYLOCS, start_col + Math.max(cellsize, bb.height)/cellsize + 1);
  166.     int cellmidx; 
  167.     int cellmidy;
  168.     int offset = cellsize/2;
  169.     for (int rows = start_row; rows <= end_row; rows++) {
  170.         cellmidx = (rows * cellsize) + offset;
  171.         for (int cols = start_col; cols <= end_col; cols++) {
  172.         cellmidy = (cols * cellsize) + offset;
  173.         if (r.perim.inside(cellmidx, cellmidy)) {
  174.             location[rows][cols] = loc;
  175.         }
  176.         }
  177.     }
  178.     };
  179.  
  180.     /*------------------------------------------------------------
  181.             Location info initialization.
  182.       ------------------------------------------------------------*/
  183.  
  184.     // Initialize the array of locations.
  185.     // This is a HUGE method - it should perhaps be set up to 
  186.     // initialize the data from a stream.
  187.     public boolean initMapLocations() {
  188.  
  189.     Location loc;
  190.     Polygon p;
  191.     location = new Location[NXLOCS][NYLOCS];
  192.  
  193.     // Mathematics Building ----------------------------
  194.     loc = new Building(this,  new Point(165, 290));
  195.     loc.setName("Mathematics Building");
  196.     loc.setURL("http://www.math.ubc.ca");
  197.     loc.initKeywords();
  198.     loc.setInfoText("Mathematics Department,\n"+
  199.         "#121-1984 Mathematics Rd,\n" +
  200.         "University of British Columbia,\n" +
  201.         "Vancouver, BC,\n" +
  202.         "V6T 1Z2\n"+
  203.         "\n        Contains:\n\n");
  204.     loc.appendtoInfoText("Mathematics Department");
  205.     loc.appendtoInfoText("Mathematics Library");
  206.     loc.appendtoInfoText("... Java programmers!");
  207.     p = new Polygon();
  208.     p.addPoint(165, 289);
  209.     p.addPoint(180, 289);
  210.     p.addPoint(180, 297);
  211.     p.addPoint(165, 297);
  212.     loc.getRegion().perim = p;
  213.         initLocsFromRegion(loc, loc.getRegion());
  214.  
  215.     // Mathematics Annex ----------------------------
  216.     loc = new Building(this,  new Point(184, 282));
  217.     loc.setName("Mathematics Annex");
  218.     loc.setURL("http://www.math.ubc.ca");
  219.     loc.setInfoText("Mathematics Annex,\n"+
  220.         "1986 Mathematics Rd");
  221.     loc.initKeywords();
  222.     loc.addKeyword("Mathematics Annex");
  223.     p = new Polygon();
  224.     p.addPoint(182, 278);
  225.     p.addPoint(187, 278);
  226.     p.addPoint(187, 292);
  227.     p.addPoint(182, 292);
  228.     loc.getRegion().perim = p;
  229.         initLocsFromRegion(loc, loc.getRegion());
  230.  
  231.     // Old Computer Science Building ----------------------------
  232.     loc = new Building(this,  new Point(195, 295));
  233.     loc.setName("Old Computer Science Building");
  234.     loc.setURL("http://www.science.ubc.ca/departments/sci1/");
  235.     loc.initKeywords();
  236.     loc.setInfoText("Old Computer Science Building,\n"+
  237.         "6356 Agricultural Road\n" +
  238.         "\n        Contains:\n\n");
  239.     loc.appendtoInfoText("University Computing Services");
  240.     loc.appendtoInfoText("Science One program");
  241.     loc.appendtoInfoText("Statistics Department");
  242.     p = new Polygon();
  243.     p.addPoint(193, 293);
  244.     p.addPoint(197, 293);
  245.     p.addPoint(197, 301);
  246.     p.addPoint(202, 301);
  247.     p.addPoint(202, 307);
  248.     p.addPoint(199, 307);
  249.     p.addPoint(199, 312);
  250.     p.addPoint(193, 312);
  251.     loc.getRegion().perim = p;
  252.         initLocsFromRegion(loc, loc.getRegion());
  253.  
  254.     // Old Auditorium ----------------------------
  255.     loc = new Building(this,  new Point(155, 290));
  256.     loc.setName("Old Auditorium");
  257.     loc.initKeywords();
  258.     loc.setInfoText("Old Auditorium,\n"+
  259.         "6344 Memorial Road\n" +
  260.         "\n        Contains:\n\n");
  261.     loc.appendtoInfoText("Yum Yum's (Chinese Food)");
  262.     loc.addKeyword("Cafeteria");
  263.     p = new Polygon();
  264.     p.addPoint(152, 289);
  265.     p.addPoint(160, 289);
  266.     p.addPoint(160, 293);
  267.     p.addPoint(158, 293);
  268.     p.addPoint(158, 298);
  269.     p.addPoint(160, 298);
  270.     p.addPoint(160, 301);
  271.     p.addPoint(152, 301);
  272.     p.addPoint(152, 299);
  273.     p.addPoint(154, 299);
  274.     p.addPoint(154, 292);
  275.     p.addPoint(152, 292);
  276.     loc.getRegion().perim = p;
  277.         initLocsFromRegion(loc, loc.getRegion());
  278.  
  279.     // Old Administration Building  ----------------------------
  280.     loc = new Building(this,  new Point(155, 282));
  281.     loc.setName("Old Administration Building");
  282.     loc.setURL("http://www.bog.ubc.ca/");
  283.     loc.initKeywords();
  284.     loc.setInfoText("Old Adminstration Building,\n"+
  285.         "6328 Memorial Road\n"+
  286.         "\n      Contains:\n\n");
  287.     loc.appendtoInfoText("Board of Governors");
  288.     loc.appendtoInfoText("Budget Planning & Systems Management");
  289.     loc.appendtoInfoText("Ceremonies Office");
  290.     loc.appendtoInfoText("Chancellor's Office");
  291.     loc.appendtoInfoText("Community Relations");
  292.     loc.appendtoInfoText("President's Office");
  293.     loc.appendtoInfoText("UBC Press");
  294.     loc.appendtoInfoText("Vice President's Office");
  295.     p = new Polygon();
  296.     p.addPoint(153, 279);
  297.     p.addPoint(160, 279);
  298.     p.addPoint(160, 287);
  299.     p.addPoint(153, 287);
  300.     loc.getRegion().perim = p;
  301.         initLocsFromRegion(loc, loc.getRegion());
  302.  
  303.     // Buchanan Building A ----------------------------
  304.     loc = new Building(this,  new Point(130, 255));
  305.     loc.setName("Buchanan Block A");
  306.     loc.setURL("http://www.arts.ubc.ca/");
  307.     loc.initKeywords();
  308.     loc.setInfoText("Buchanan Block A,\n"+
  309.         "1866 Main Mall\n"+
  310.         "\n      Contains:\n\n");
  311.     loc.appendtoInfoText("Faculty of Arts");
  312.     loc.appendtoInfoText("Arts Snack Bar");
  313.     p = new Polygon();
  314.     p.addPoint(125, 253);
  315.     p.addPoint(140, 253);
  316.     p.addPoint(140, 259);
  317.     p.addPoint(135, 259);
  318.     p.addPoint(135, 261);
  319.     p.addPoint(125, 261);
  320.     loc.getRegion().perim = p;
  321.         initLocsFromRegion(loc, loc.getRegion());
  322.  
  323.     // Buchanan Building B ----------------------------
  324.     loc = new Building(this,  new Point(142, 245));
  325.     loc.setName("Buchanan Block B");
  326.     loc.setURL("http://www.arts.ubc.ca/");
  327.     loc.initKeywords();
  328.     loc.setInfoText("Buchanan Block B,\n"+
  329.         "1866 Main Mall\n"+
  330.         "\n      Contains:\n\n");
  331.     loc.appendtoInfoText("Faculty of Arts");
  332.     p = new Polygon();
  333.     p.addPoint(139, 241);
  334.     p.addPoint(144, 241);
  335.     p.addPoint(144, 261);
  336.     p.addPoint(139, 261);
  337.     loc.getRegion().perim = p;
  338.         initLocsFromRegion(loc, loc.getRegion());
  339.  
  340.     // Buchanan Building C ----------------------------
  341.     loc = new Building(this,  new Point(125, 243));
  342.     loc.setName("Buchanan Block C");
  343.     loc.setURL("http://www.arts.ubc.ca/");
  344.     loc.initKeywords();
  345.     loc.setInfoText("Buchanan Block C,\n"+
  346.         "1866 Main Mall\n"+
  347.         "\n      Contains:\n\n");
  348.     loc.appendtoInfoText("Faculty of Arts");
  349.     p = new Polygon();
  350.     p.addPoint(123, 240);
  351.     p.addPoint(137, 240);
  352.     p.addPoint(137, 245);
  353.     p.addPoint(123, 245);
  354.     loc.getRegion().perim = p;
  355.         initLocsFromRegion(loc, loc.getRegion());
  356.  
  357.     // Buchanan Building D ----------------------------
  358.     loc = new Building(this,  new Point(115, 225));
  359.     loc.setName("Buchanan Block D");
  360.     loc.setURL("http://www.arts.ubc.ca/");
  361.     loc.initKeywords();
  362.     loc.setInfoText("Buchanan Block D,\n"+
  363.         "1866 Main Mall\n"+
  364.         "\n      Contains:\n\n");
  365.     loc.appendtoInfoText("Faculty of Arts");
  366.     p = new Polygon();
  367.     p.addPoint(115, 225);
  368.     p.addPoint(122, 225);
  369.     p.addPoint(122, 247);
  370.     p.addPoint(115, 247);
  371.     loc.getRegion().perim = p;
  372.         initLocsFromRegion(loc, loc.getRegion());
  373.  
  374.     // Buchanan Building E ----------------------------
  375.     loc = new Building(this,  new Point(125,228 ));
  376.     loc.setName("Buchanan Block E");
  377.     loc.setURL("http://www.arts.ubc.ca/");
  378.     loc.initKeywords();
  379.     loc.setInfoText("Buchanan Block E,\n"+
  380.         "1866 Main Mall\n"+
  381.         "\n      Contains:\n\n");
  382.     loc.appendtoInfoText("Faculty of Arts");
  383.     p = new Polygon();
  384.     p.addPoint(122, 226);
  385.     p.addPoint(133, 226);
  386.     p.addPoint(133, 232);
  387.     p.addPoint(122, 232);
  388.     loc.getRegion().perim = p;
  389.         initLocsFromRegion(loc, loc.getRegion());
  390.  
  391.     // Buchanan Tower ----------------------------
  392.     loc = new Building(this,  new Point(140, 230));
  393.     loc.setName("Buchanan Tower");
  394.     loc.setURL("http://www.arts.ubc.ca/");
  395.     loc.initKeywords();
  396.     loc.setInfoText("Buchanan Tower,\n"+
  397.         "1873 East Mall\n"+
  398.         "\n      Contains:\n\n");
  399.     loc.appendtoInfoText("Economics Department");
  400.     loc.appendtoInfoText("English Department");
  401.     loc.appendtoInfoText("French Department");
  402.     loc.appendtoInfoText("Germanic Studies");
  403.     loc.appendtoInfoText("Hispanic and Italian Studies");
  404.     loc.appendtoInfoText("History Department");
  405.     loc.appendtoInfoText("Philosophy Department");
  406.     p = new Polygon();
  407.     p.addPoint(138, 225);
  408.     p.addPoint(143, 225);
  409.     p.addPoint(143, 235);
  410.     p.addPoint(138, 235);
  411.     loc.getRegion().perim = p;
  412.         initLocsFromRegion(loc, loc.getRegion());
  413.  
  414.     // Lasserre Building  ----------------------------
  415.     loc = new Building(this,  new Point(142, 280));
  416.     loc.setName("Lasserre Building");
  417.     loc.setURL("http://www.architecture.ubc.ca/");
  418.     loc.initKeywords();
  419.     loc.setInfoText("Lasserre Building,\n"+
  420.         "6333 Memorial Road\n"+
  421.         "\n      Contains:\n\n");
  422.     loc.appendtoInfoText("School of Architecture");
  423.     loc.appendtoInfoText("Community and Regional Planning");
  424.     loc.appendtoInfoText("Fine Arts Department");
  425.     p = new Polygon();
  426.     p.addPoint(140, 277);
  427.     p.addPoint(145, 277);
  428.     p.addPoint(145, 290);
  429.     p.addPoint(140, 290);
  430.     loc.getRegion().perim = p;
  431.         initLocsFromRegion(loc, loc.getRegion());
  432.  
  433.     // Fredrick Wood Theatre  ----------------------------
  434.     loc = new Building(this,  new Point(122, 290));
  435.     loc.setName("Fredrick Wood Theatre");
  436.     loc.setURL("http://www.arts.ubc.ca/arts/theatre/theatre.html");
  437.     loc.initKeywords();
  438.     loc.setInfoText("Fredrick Wood Theatre,\n"+
  439.         "6354 Crescent Road\n"+
  440.         "\n      Contains:\n\n");
  441.     loc.appendtoInfoText("Dorothy Somerset Studio");
  442.     loc.appendtoInfoText("Fredrick Wood Theatre Box Office");
  443.     loc.appendtoInfoText("Theatre Department");
  444.     loc.addKeyword("Public Attraction");
  445.     p = new Polygon();
  446.     p.addPoint(120, 287);
  447.     p.addPoint(126, 287);
  448.     p.addPoint(126, 292);
  449.     p.addPoint(129, 292);
  450.     p.addPoint(129, 296);
  451.     p.addPoint(125, 296);
  452.     p.addPoint(125, 301);
  453.     p.addPoint(120, 301);
  454.     loc.getRegion().perim = p;
  455.         initLocsFromRegion(loc, loc.getRegion());
  456.  
  457.     // Belkin Art Gallery  ----------------------------
  458.     loc = new Building(this,  new Point(125, 277));
  459.     loc.setName("Belkin Art Gallery");
  460.     loc.setURL("http://www.arts.ubc.ca/arts/finearts/main.htm");
  461.     loc.initKeywords();
  462.     loc.setInfoText("Morris and Helen Belkin Art Gallery,\n"+
  463.         "1825 Main Mall,\n"+
  464.         "Vancouver, BC; V6T 1Z2,\n"+
  465.         "(604) 822-2759.\n"+
  466.         "Hours: Tues - Friday 10am - 5pm,\n"+
  467.         "       Saturday noon - 5pm");
  468.     p = new Polygon();
  469.     p.addPoint(124, 275);
  470.     p.addPoint(131, 275);
  471.     p.addPoint(131, 280);
  472.     p.addPoint(120, 280);
  473.     p.addPoint(120, 277);
  474.     p.addPoint(124, 277);
  475.     loc.getRegion().perim = p;
  476.         initLocsFromRegion(loc, loc.getRegion());
  477.  
  478.     // Geography Building ----------------------------
  479.     loc = new Building(this,  new Point(170, 305));
  480.     loc.setName("Geography Building");
  481.     loc.setURL("http://www.geog.ubc.ca");
  482.     loc.initKeywords();
  483.     loc.setInfoText("Geography Building,\n"+
  484.         "1984 West Mall\n"+
  485.         "\n        Contains:\n\n");
  486.     loc.appendtoInfoText("Geography Department");
  487.     loc.appendtoInfoText("Map Library");
  488.     p = new Polygon();
  489.     p.addPoint(168, 302);
  490.     p.addPoint(173, 302);
  491.     p.addPoint(173, 308);
  492.     p.addPoint(176, 304);
  493.     p.addPoint(180, 304);
  494.     p.addPoint(184, 307);
  495.     p.addPoint(184, 302);
  496.     p.addPoint(187, 302);
  497.     p.addPoint(187, 314);
  498.     p.addPoint(184, 314);
  499.     p.addPoint(184, 312);
  500.     p.addPoint(173, 312);
  501.     p.addPoint(173, 314);
  502.     p.addPoint(168, 314);
  503.     loc.getRegion().perim = p;
  504.         initLocsFromRegion(loc, loc.getRegion());
  505.  
  506.     // Music Building  ----------------------------
  507.     loc = new Building(this,  new Point(140, 300));
  508.     loc.setName("Music Building");
  509.     loc.setURL("http://www.arts.ubc.ca/arts/music/music.html");
  510.     loc.initKeywords();
  511.     loc.setInfoText("Music Building,\n"+
  512.         "6361 Memorial Road"+
  513.         "\n        Contains:\n\n");
  514.     loc.appendtoInfoText("Music Department");
  515.     loc.appendtoInfoText("Music Library");
  516.     loc.addKeyword("Public Attraction");
  517.     p = new Polygon();
  518.     p.addPoint(134, 295);
  519.     p.addPoint(145, 295);
  520.     p.addPoint(145, 303);
  521.     p.addPoint(134, 303);
  522.     loc.getRegion().perim = p;
  523.         initLocsFromRegion(loc, loc.getRegion());
  524.  
  525.     // Henry Angus/David Lam Buildings ----------------------------
  526.     loc = new Building(this,  new Point(200, 280));
  527.     loc.setName("Henry Angus/David Lam Buildings");
  528.     loc.setURL("http://www.commerce.ubc.ca");
  529.     loc.initKeywords();
  530.     loc.setInfoText("Henry Angus Building,\n"+
  531.         "2053 Main Mall\n"+
  532.         "David Lam Management Research Center\n"+
  533.         "2033 Main Mall\n"+
  534.         "\n        Contains:\n\n");
  535.     loc.appendtoInfoText("Faculty of Commerce ");
  536.     loc.appendtoInfoText(" & Business Administration");
  537.     loc.appendtoInfoText("Trekker's Restaurant");
  538.     loc.appendtoInfoText("Express Cafeteria");
  539.     loc.appendtoInfoText("Faculty Development");
  540.     loc.appendtoInfoText("Faculty of Arts MultiMedia Lab");
  541.     loc.appendtoInfoText("Continuing Studies");
  542.     loc.appendtoInfoText("David Lam Management Research Library");
  543.     loc.addKeyword("Henry Angus Building");
  544.     loc.addKeyword("David Lam Management Research Center");
  545.     loc.addKeyword("Payphone");
  546.  
  547.     p = new Polygon();
  548.     p.addPoint(195, 279);
  549.     p.addPoint(205, 279);
  550.     p.addPoint(205, 277);
  551.     p.addPoint(227, 277);
  552.     p.addPoint(227, 292);
  553.     p.addPoint(223, 292);
  554.     p.addPoint(223, 284);
  555.     p.addPoint(219, 284);
  556.     p.addPoint(219, 288);
  557.     p.addPoint(213, 282);
  558.     p.addPoint(210, 282);
  559.     p.addPoint(210, 288);
  560.     p.addPoint(196, 288);
  561.     p.addPoint(192, 282);
  562.     loc.getRegion().perim = p;
  563.         initLocsFromRegion(loc, loc.getRegion());
  564.  
  565.     // Hennings Building (Physics) ----------------------------
  566.     loc = new Building(this,  new Point(195, 230));
  567.     loc.setName("Hennings Building (Physics)");
  568.     loc.setURL("http://www.physics.ubc.ca");
  569.     loc.setInfoText("Hennings Building,\n"+
  570.         "Department of Physics\n"+
  571.         "6224 Agricultural Rd.");
  572.     loc.initKeywords();
  573.     loc.addKeyword("Hennings Building");
  574.     loc.addKeyword("Physics Department");
  575.     p = new Polygon();
  576.     p.addPoint(193, 227);
  577.     p.addPoint(205, 227);
  578.     p.addPoint(205, 250);
  579.     p.addPoint(193, 250);
  580.     loc.getRegion().perim = p;
  581.         initLocsFromRegion(loc, loc.getRegion());
  582.  
  583.     // Hebb Building (Physics) ----------------------------
  584.     loc = new Building(this,  new Point(210, 230));
  585.     loc.setName("Hebb Building (Physics)");
  586.     loc.setURL("http://www.physics.ubc.ca");
  587.     loc.setInfoText("Hebb Building,\n"+
  588.         "Department of Physics\n"+
  589.         "2045 East Mall\n"+
  590.         "\n     Contains:\n"+
  591.         "Hebb theater\n");
  592.     loc.initKeywords();
  593.     loc.addKeyword("Hebb Building");
  594.     loc.addKeyword("Physics Department");
  595.     p = new Polygon();
  596.     p.addPoint(208, 225);
  597.     p.addPoint(213, 225);
  598.     p.addPoint(213, 234);
  599.     p.addPoint(211, 234);
  600.     p.addPoint(211, 236);
  601.     p.addPoint(218, 236);
  602.     p.addPoint(218, 236);
  603.     p.addPoint(218, 240);
  604.     p.addPoint(208, 240);
  605.     loc.getRegion().perim = p;
  606.         initLocsFromRegion(loc, loc.getRegion());
  607.  
  608.     // MacMillan Building  ----------------------------
  609.     loc = new Building(this,  new Point(330, 280));
  610.     loc.setName("MacMillan Building");
  611.     loc.setURL("http://www.forestry.ubc.ca");
  612.     loc.initKeywords();
  613.     loc.setInfoText("MacMillan Building,\n"+
  614.         "2357 Main Mall\n" +
  615.         "\n    Contains:\n\n");
  616.     loc.appendtoInfoText("Agriculture Department");
  617.     loc.appendtoInfoText("Forestry Department");
  618.     loc.appendtoInfoText("Forestry/Agriculture Library");
  619.     loc.appendtoInfoText("Undercut cafeteria");
  620.     p = new Polygon();
  621.     p.addPoint(327, 278);
  622.     p.addPoint(340, 278);
  623.     p.addPoint(340, 282);
  624.     p.addPoint(332, 282);
  625.     p.addPoint(332, 290);
  626.     p.addPoint(342, 290);
  627.     p.addPoint(341, 283);
  628.     p.addPoint(343, 283);
  629.     p.addPoint(344, 280);
  630.     p.addPoint(345, 280);
  631.     p.addPoint(348, 281);
  632.     p.addPoint(350, 281);
  633.     p.addPoint(356, 281);
  634.     p.addPoint(356, 285);
  635.     p.addPoint(348, 285);
  636.     p.addPoint(348, 295);
  637.     p.addPoint(345, 295);
  638.     p.addPoint(345, 298);
  639.     p.addPoint(340, 299);
  640.     p.addPoint(341, 296);
  641.     p.addPoint(327, 296);
  642.     loc.getRegion().perim = p;
  643.         initLocsFromRegion(loc, loc.getRegion());
  644.  
  645.     // Forward Building  ----------------------------
  646.     loc = new Building(this,  new Point(312, 292));
  647.     loc.setName("Forward Building (Metallurgy)");
  648.     loc.initKeywords();
  649.     loc.setInfoText("Frank Forward Building,\n"+
  650.         "6350 Stores Road\n" +
  651.         "\n    Contains:\n\n");
  652.     loc.appendtoInfoText("Metallurgy Department");
  653.     p = new Polygon();
  654.     p.addPoint(309, 290);
  655.     p.addPoint(315, 290);
  656.     p.addPoint(315, 296);
  657.     p.addPoint(321, 296);
  658.     p.addPoint(321, 298);
  659.     p.addPoint(320, 298);
  660.     p.addPoint(320, 301);
  661.     p.addPoint(312, 301);
  662.     p.addPoint(312, 297);
  663.     p.addPoint(309, 297);
  664.     loc.getRegion().perim = p;
  665.         initLocsFromRegion(loc, loc.getRegion());
  666.  
  667.  
  668.     // The Barn  ----------------------------
  669.     loc = new Building(this,  new Point(314, 283));
  670.     loc.setName("The Barn");
  671.     loc.initKeywords();
  672.     loc.setInfoText("The Barn Coffee Shop,\n"+
  673.         "2323 Main Mall");
  674.     loc.addKeyword("Cafeteria");
  675.     p = new Polygon();
  676.     p.addPoint(312, 280);
  677.     p.addPoint(318, 280);
  678.     p.addPoint(318, 285);
  679.     p.addPoint(312, 285);
  680.     loc.getRegion().perim = p;
  681.         initLocsFromRegion(loc, loc.getRegion());
  682.  
  683.     // MacLeod Building (Electrical Engineering) -------------------------
  684.     loc = new Building(this,  new Point(335, 255));
  685.     loc.setName("MacLeod Building");
  686.     loc.setURL("http://www.ee.ubc.ca");
  687.     loc.setInfoText("MacLeod Building,\n"+
  688.         "2356 Main Mall\n" +
  689.         "\n   Contains:\n"+
  690.         "Electrical Engineering Department\n");
  691.  
  692.     loc.initKeywords();
  693.     loc.addKeyword("MacLeod Building");
  694.     loc.addKeyword("Electrical Engineering Department");
  695.     p = new Polygon();
  696.     p.addPoint(323, 257);
  697.     p.addPoint(334, 257);
  698.     p.addPoint(334, 249);
  699.     p.addPoint(339, 249);
  700.     p.addPoint(339, 258);
  701.     p.addPoint(340, 258);
  702.     p.addPoint(340, 264);
  703.     p.addPoint(323, 264);
  704.     loc.getRegion().perim = p;
  705.         initLocsFromRegion(loc, loc.getRegion());
  706.  
  707.     // Chemistry Building ----------------------------
  708.     loc = new Building(this,  new Point(195, 255));
  709.     loc.setName("Chemistry Building");
  710.     loc.setInfoText("Chemistry Department\n"+
  711.         "2036 Main Mall");
  712.     loc.initKeywords();
  713.     loc.addKeyword("Chemistry Building");
  714.     loc.addKeyword("Chemistry Department");
  715.     p = new Polygon();
  716.     p.addPoint(193, 251);
  717.     p.addPoint(197, 251);
  718.     p.addPoint(197, 253);
  719.     p.addPoint(213, 253);
  720.     p.addPoint(213, 245);
  721.     p.addPoint(216, 245);
  722.     p.addPoint(216, 250);
  723.     p.addPoint(226, 250);
  724.     p.addPoint(226, 264);
  725.     p.addPoint(221, 264);
  726.     p.addPoint(221, 261);
  727.     p.addPoint(196, 261);
  728.     p.addPoint(196, 258);
  729.     p.addPoint(193, 258);
  730.     loc.getRegion().perim = p;
  731.     initLocsFromRegion(loc, loc.getRegion());
  732.  
  733.     // Chemistry & Physics Building ----------------------------
  734.     loc = new Building(this,  new Point(220, 230));
  735.     loc.setName("Chemistry & Physics Building");
  736.     loc.setInfoText("Chemistry & Physics Building,\n"+
  737.         "6221 University Blvd");
  738.  
  739.     loc.initKeywords();
  740.     loc.addKeyword("Chemistry & Physics Building");
  741.  
  742.     p = new Polygon();
  743.     p.addPoint(218, 227);
  744.     p.addPoint(221, 227);
  745.     p.addPoint(224, 231);
  746.     p.addPoint(224, 235);
  747.     p.addPoint(228, 237);
  748.     p.addPoint(228, 246);
  749.     p.addPoint(226, 246);
  750.     p.addPoint(226, 250);
  751.     p.addPoint(222, 250);
  752.     p.addPoint(222, 245);
  753.     p.addPoint(220, 245);
  754.     p.addPoint(220, 234);
  755.     p.addPoint(218, 234);
  756.     loc.getRegion().perim = p;
  757.     initLocsFromRegion(loc, loc.getRegion());
  758.  
  759.     // Brock Hall  ----------------------------
  760.     loc = new Building(this,  new Point(150, 205));
  761.     loc.setName("Brock Hall");
  762.     loc.setURL("http://www.student-services.ubc.ca");
  763.     loc.initKeywords();
  764.     loc.setInfoText("Brock Hall,\n"+
  765.         "1874 East Mall,\n" +
  766.         "University of British Columbia,\n" +
  767.         "Vancouver, BC\n"+
  768.         "V6T 1Z1\n"+
  769.         "\n      Contains:\n\n");
  770.     loc.appendtoInfoText("Admissions (Undergraduate)");
  771.     loc.appendtoInfoText("Awards and Financial Aid");
  772.     loc.appendtoInfoText("Career Services");
  773.     loc.appendtoInfoText("Housing");
  774.     loc.appendtoInfoText("Publications");
  775.     loc.appendtoInfoText("Registrar's Office");
  776.     loc.appendtoInfoText("Registration");
  777.     loc.appendtoInfoText("Senate");
  778.     loc.appendtoInfoText("Student Records");
  779.     loc.appendtoInfoText("Student Services");
  780.     p = new Polygon();
  781.     p.addPoint(143, 201);
  782.     p.addPoint(147, 201);
  783.     p.addPoint(147, 197);
  784.     p.addPoint(153, 197);
  785.     p.addPoint(153, 201);
  786.     p.addPoint(157, 201);
  787.     p.addPoint(157, 202);
  788.     p.addPoint(159, 202);
  789.     p.addPoint(159, 204);
  790.     p.addPoint(157, 204);
  791.     p.addPoint(157, 215);
  792.     p.addPoint(143, 215);
  793.     p.addPoint(143, 211);
  794.     p.addPoint(140, 211);
  795.     p.addPoint(140, 213);
  796.     p.addPoint(135, 213);
  797.     p.addPoint(135, 204);
  798.     p.addPoint(140, 204);
  799.     p.addPoint(140, 208);
  800.     p.addPoint(143, 208);
  801.     p.addPoint(143, 201);
  802.     loc.getRegion().perim = p;
  803.         initLocsFromRegion(loc, loc.getRegion());
  804.  
  805.     // Women's Studies  ----------------------------
  806.     loc = new Building(this,  new Point(165, 210));
  807.     loc.setName("Women's Studies");
  808.     loc.initKeywords();
  809.     loc.setInfoText("Women's Studies,\n"+
  810.         "1896 East Mall");
  811.     p = new Polygon();
  812.     p.addPoint(162, 210);
  813.     p.addPoint(171, 210);
  814.     p.addPoint(171, 215);
  815.     p.addPoint(162, 215);
  816.     loc.getRegion().perim = p;
  817.         initLocsFromRegion(loc, loc.getRegion());
  818.  
  819.     // Student Union Building ----------------------------
  820.     loc = new Building(this,  new Point(190, 180));
  821.     loc.setName("Student Union Building");
  822.     loc.setURL("http://www.ams.ubc.ca");
  823.     loc.initKeywords();
  824.     loc.setInfoText("Student Union Building,\n"+
  825.         "6138 Student Union Bldg. Blvd\n"+
  826.         "\n        Contains:\n\n");
  827.     loc.appendtoInfoText("AMS Box Office");
  828.     loc.appendtoInfoText("AMS Word Processing");
  829.     loc.appendtoInfoText("Alma Mater Society");
  830.     loc.appendtoInfoText("Art Gallery");
  831.     loc.appendtoInfoText("Bank of Montreal");
  832.     loc.appendtoInfoText("Blue Chip Cookies");
  833.     loc.appendtoInfoText("Copy Right Copy Center");
  834.     loc.appendtoInfoText("Gallery Lounge");
  835.     loc.appendtoInfoText("Movie Theatre");
  836.     loc.appendtoInfoText("Ombudsoffice");
  837.     loc.appendtoInfoText("Pendulum Restaurant");
  838.     loc.appendtoInfoText("Pi R squared Pizza");
  839.     loc.appendtoInfoText("Pit Pub");
  840.     loc.appendtoInfoText("SUB cafeteria");
  841.     loc.appendtoInfoText("SpeakEasy Peer Counselling");
  842.     loc.appendtoInfoText("Subcetera");
  843.     loc.appendtoInfoText("The Deli Restaurant");
  844.     loc.appendtoInfoText("Thunderbird Stationery Store");
  845.     loc.appendtoInfoText("Toronto Dominion Bank ATM");
  846.     loc.appendtoInfoText("Travel CUTS");
  847.     loc.appendtoInfoText("VanCity Credit Union ATM");
  848.     loc.appendtoInfoText("Video Arcade");
  849.     loc.addKeyword("Student Union Building");
  850.     loc.addKeyword("SUB");
  851.     loc.addKeyword("Payphone");
  852.     loc.addKeyword("Public Washrooms");
  853.     p = new Polygon();
  854.     p.addPoint(186, 177);
  855.     p.addPoint(204, 177);
  856.     p.addPoint(204, 202);
  857.     p.addPoint(186, 202);
  858.     loc.getRegion().perim = p;
  859.         initLocsFromRegion(loc, loc.getRegion());
  860.  
  861.     // Aquatic Center ----------------------------
  862.     loc = new Building(this,  new Point(215, 175));
  863.     loc.setName("Aquatic Center");
  864.     loc.initKeywords();
  865.     loc.setInfoText("Aquatic Center,\n"+
  866.         "6121 University Blvd\n"+
  867.         "\n        Contains:\n\n");
  868.     loc.appendtoInfoText("Swimming Pool");
  869.     loc.appendtoInfoText("Weight room");
  870.     loc.appendtoInfoText("Sauna");
  871.     loc.addKeyword("Payphone");
  872.     loc.addKeyword("Public Attraction");
  873.     loc.addKeyword("Recreation Facility");
  874.     p = new Polygon();
  875.     p.addPoint(211, 173);
  876.     p.addPoint(215, 174);
  877.     p.addPoint(215, 173);
  878.     p.addPoint(217, 173);
  879.     p.addPoint(217, 172);
  880.     p.addPoint(221, 172);
  881.     p.addPoint(221, 179);
  882.     p.addPoint(223, 178);
  883.     p.addPoint(223, 181);
  884.     p.addPoint(226, 181);
  885.     p.addPoint(226, 182);
  886.     p.addPoint(227, 182);
  887.     p.addPoint(227, 191);
  888.     p.addPoint(223, 191);
  889.     p.addPoint(221, 193);
  890.     p.addPoint(217, 193);
  891.     p.addPoint(215, 192);
  892.     p.addPoint(212, 192);
  893.     p.addPoint(210, 191);
  894.     p.addPoint(210, 176);
  895.     p.addPoint(211, 176);
  896.     loc.getRegion().perim = p;
  897.         initLocsFromRegion(loc, loc.getRegion());
  898.  
  899.     // War Memorial Gym ----------------------------
  900.     loc = new Building(this,  new Point(230, 155));
  901.     loc.setName("War Memorial Gym");
  902.     loc.initKeywords();
  903.     loc.setInfoText("War Memorial Gym,\n"+
  904.         "6081 University Blvd\n"+
  905.         "\n        Contains:\n\n")
  906. ;    loc.appendtoInfoText("Physical Education Center");
  907.     loc.appendtoInfoText("Physical Education & Recreation Department");
  908.     loc.addKeyword("Recreation Facility");
  909.     loc.addKeyword("Public Attraction");
  910.     p = new Polygon();
  911.     p.addPoint(224, 153);
  912.     p.addPoint(237, 153);
  913.     p.addPoint(237, 169);
  914.     p.addPoint(234, 169);
  915.     p.addPoint(234, 172);
  916.     p.addPoint(228, 172);
  917.     p.addPoint(227, 170);
  918.     p.addPoint(224, 170);
  919.     loc.getRegion().perim = p;
  920.         initLocsFromRegion(loc, loc.getRegion());
  921.  
  922.     // Student Recreation Center ----------------------------
  923.     loc = new Building(this,  new Point(180, 155));
  924.     loc.setName("Student Recreation Center");
  925.     loc.initKeywords();
  926.     loc.setInfoText("Student Recreation Center\n"+
  927.         "6081 Student Union Building Blvd.\n"+
  928.         "\n        Contains:\n\n");
  929.     loc.appendtoInfoText("Weight Training Facility");
  930.     loc.appendtoInfoText("Climbing Gym");
  931.     loc.addKeyword("Recreation Facility");
  932.     loc.addKeyword("RecFac");
  933.     p = new Polygon();
  934.     p.addPoint(179, 153);
  935.     p.addPoint(186, 153);
  936.     p.addPoint(186, 167);
  937.     p.addPoint(188, 169);
  938.     p.addPoint(187, 173);
  939.     p.addPoint(184, 173);
  940.     p.addPoint(184, 172);
  941.     p.addPoint(179, 172);
  942.     loc.getRegion().perim = p;
  943.         initLocsFromRegion(loc, loc.getRegion());
  944.  
  945.     // Curtis Building ----------------------------
  946.     loc = new Building(this,  new Point(105, 200));
  947.     loc.setName("Curtis Building (Law)");
  948.     loc.setURL("http://www.law.ubc.ca/");
  949.     loc.initKeywords();
  950.     loc.setInfoText("George F. Curtis Building,\n"+
  951.         "1822 East Mall\n"+
  952.         "\n        Contains:\n\n");
  953.     loc.appendtoInfoText("Faculty of Law");
  954.     loc.appendtoInfoText("Law Library");
  955.     p = new Polygon();
  956.     p.addPoint(103, 195);
  957.     p.addPoint(108, 195);
  958.     p.addPoint(108, 198);
  959.     p.addPoint(115, 197);
  960.     p.addPoint(115, 200);
  961.     p.addPoint(112, 200);
  962.     p.addPoint(112, 202);
  963.     p.addPoint(117, 202);
  964.     p.addPoint(120, 198);
  965.     p.addPoint(123, 204);
  966.     p.addPoint(126, 204);
  967.     p.addPoint(126, 215);
  968.     p.addPoint(103, 215);
  969.     loc.getRegion().perim = p;
  970.         initLocsFromRegion(loc, loc.getRegion());
  971.  
  972.     // Thunderbird Winter Sports Center ----------------------------
  973.     loc = new Building(this,  new Point(415, 145));
  974.     loc.setName("Thunderbird Winter Sports Center");
  975.     loc.initKeywords();
  976.     loc.setInfoText("Thunderbird Winter Sports Center,\n"+
  977.         "6066 Thunderbird Blvd\n"+
  978.         "\n        Contains:\n\n");
  979.     loc.appendtoInfoText("Hockey rinks");
  980.     loc.appendtoInfoText("Skating rinks");
  981.     loc.appendtoInfoText("Curling rinks");
  982.     loc.appendtoInfoText("Thunderbird Sports Bar");
  983.     loc.appendtoInfoText("Thunderdeck Lounge");
  984.     loc.addKeyword("Recreation Facility");
  985.     loc.addKeyword("Public Attraction");
  986.     p = new Polygon();
  987.     p.addPoint(413, 141);
  988.     p.addPoint(433, 141);
  989.     p.addPoint(433, 175);
  990.     p.addPoint(424, 175);
  991.     p.addPoint(424, 168);
  992.     p.addPoint(408, 168);
  993.     p.addPoint(408, 158);
  994.     p.addPoint(413, 158);
  995.     loc.getRegion().perim = p;
  996.         initLocsFromRegion(loc, loc.getRegion());
  997.  
  998.     // Osbourne Gym ----------------------------
  999.     loc = new Building(this,  new Point(410, 185));
  1000.     loc.setName("Osbourne Gym");
  1001.     loc.initKeywords();
  1002.     loc.setInfoText("Osbourne Gym,\n"+
  1003.         "6108 Thunderbird Blvd");
  1004.     loc.addKeyword("Recreation Facility");
  1005.     p = new Polygon();
  1006.     p.addPoint(406, 181);
  1007.     p.addPoint(425, 181);
  1008.     p.addPoint(425, 191);
  1009.     p.addPoint(418, 191);
  1010.     p.addPoint(419, 195);
  1011.     p.addPoint(425, 195);
  1012.     p.addPoint(424, 200);
  1013.     p.addPoint(426, 200);
  1014.     p.addPoint(426, 204);
  1015.     p.addPoint(410, 204);
  1016.     p.addPoint(410, 195);
  1017.     p.addPoint(416, 195);
  1018.     p.addPoint(416, 191);
  1019.     p.addPoint(406, 191);
  1020.     loc.getRegion().perim = p;
  1021.         initLocsFromRegion(loc, loc.getRegion());
  1022.  
  1023.     // RCMP & Fire Station ----------------------------
  1024.     loc = new Building(this,  new Point(495, 115));
  1025.     loc.setName("RCMP & Fire Station");
  1026.     loc.initKeywords();
  1027.     loc.setInfoText("RCMP & Fire Station,\n"+
  1028.         "2992 Wesbrook Mall");
  1029.     loc.addKeyword("Police Station");
  1030.     p = new Polygon();
  1031.     p.addPoint(488, 109);
  1032.     p.addPoint(492, 110);
  1033.     p.addPoint(492, 109);
  1034.     p.addPoint(493, 109);
  1035.     p.addPoint(494, 110);
  1036.     p.addPoint(497, 110);
  1037.     p.addPoint(497, 112);
  1038.     p.addPoint(495, 112);
  1039.     p.addPoint(496, 119);
  1040.     p.addPoint(498, 118);
  1041.     p.addPoint(498, 123);
  1042.     p.addPoint(493, 123);
  1043.     p.addPoint(493, 124);
  1044.     p.addPoint(488, 124);
  1045.     p.addPoint(488, 121);
  1046.     p.addPoint(486, 121);
  1047.     p.addPoint(486, 118);
  1048.     p.addPoint(491, 118);
  1049.     p.addPoint(491, 114);
  1050.     p.addPoint(488, 113);
  1051.     loc.getRegion().perim = p;
  1052.         initLocsFromRegion(loc, loc.getRegion());
  1053.  
  1054.     // MacDonald Building (Dentistry) ----------------------------
  1055.     loc = new Building(this,  new Point(275, 145));
  1056.     loc.setName("MacDonald Building");
  1057.     loc.setURL("http://www.med.ubc.ca/");
  1058.     loc.initKeywords();
  1059.     loc.setInfoText("J.B. MacDonald Building,\n"+
  1060.         "2199 Wesbrook Mall\n"+
  1061.         "\n        Contains:\n\n");
  1062.     loc.appendtoInfoText("Faculty of Dentistry");
  1063.     loc.appendtoInfoText("Dental Clinic");
  1064.     p = new Polygon();
  1065.     p.addPoint(272, 140);
  1066.     p.addPoint(287, 140);
  1067.     p.addPoint(287, 138);
  1068.     p.addPoint(292, 138);
  1069.     p.addPoint(292, 146);
  1070.     p.addPoint(291, 146);
  1071.     p.addPoint(291, 149);
  1072.     p.addPoint(286, 149);
  1073.     p.addPoint(286, 146);
  1074.     p.addPoint(272, 146);
  1075.     loc.getRegion().perim = p;
  1076.         initLocsFromRegion(loc, loc.getRegion());
  1077.  
  1078.     // Friedman Building (Medicine) ----------------------------
  1079.     loc = new Building(this,  new Point(275, 150));
  1080.     loc.setName("Friedman Building");
  1081.     loc.setURL("http://www.med.ubc.ca/");
  1082.     loc.initKeywords();
  1083.     loc.setInfoText("Friedman Building,\n"+
  1084.         "2146 Health Sciences Mall\n"+
  1085.         "\n        Contains:\n\n");
  1086.     loc.appendtoInfoText("Anatomy Department");
  1087.     loc.appendtoInfoText("Medical Microbiology");
  1088.     p = new Polygon();
  1089.     p.addPoint(273, 146);
  1090.     p.addPoint(278, 146);
  1091.     p.addPoint(278, 149);
  1092.     p.addPoint(280, 149);
  1093.     p.addPoint(280, 151);
  1094.     p.addPoint(278, 151);
  1095.     p.addPoint(278, 170);
  1096.     p.addPoint(273, 170);
  1097.     p.addPoint(273, 164);
  1098.     p.addPoint(272, 164);
  1099.     p.addPoint(272, 161);
  1100.     p.addPoint(273, 161);
  1101.     loc.getRegion().perim = p;
  1102.         initLocsFromRegion(loc, loc.getRegion());
  1103.  
  1104.     // Copp Building (Biochemistry/Physiology) ----------------------------
  1105.     loc = new Building(this,  new Point(275, 150));
  1106.     loc.setName("Copp Building (Biochemistry/Physiology)");
  1107.     loc.setURL("http://www.med.ubc.ca/");
  1108.     loc.initKeywords();
  1109.     loc.setInfoText("D.H. Copp Building,\n"+
  1110.         "2177 Wesbrook Mall\n"+
  1111.         "\n        Contains:\n\n");
  1112.     loc.appendtoInfoText("Biochemistry Department");
  1113.     loc.appendtoInfoText("Physiology Department");
  1114.     p = new Polygon();
  1115.     p.addPoint(257, 163);
  1116.     p.addPoint(267, 163);
  1117.     p.addPoint(267, 167);
  1118.     p.addPoint(263, 167);
  1119.     p.addPoint(263, 183);
  1120.     p.addPoint(265, 183);
  1121.     p.addPoint(265, 187);
  1122.     p.addPoint(252, 187);
  1123.     p.addPoint(252, 182);
  1124.     p.addPoint(258, 182);
  1125.     p.addPoint(258, 168);
  1126.     p.addPoint(257, 168);
  1127.     loc.getRegion().perim = p;
  1128.         initLocsFromRegion(loc, loc.getRegion());
  1129.  
  1130.     // Pharmacology Building ----------------------------
  1131.     loc = new Building(this,  new Point(272, 185));
  1132.     loc.setName("Pharmacology Building");
  1133.     loc.setURL("http://www.med.ubc.ca/Pharmacology.html");
  1134.     loc.initKeywords();
  1135.     loc.setInfoText("Pharmacology Building,\n"+
  1136.         "2176 Health Sciences Mall\n"+
  1137.         "\n        Contains:\n\n");
  1138.     loc.appendtoInfoText("Pharmacology and Therapeutics Department");
  1139.     p = new Polygon();
  1140.     p.addPoint(270, 182);
  1141.     p.addPoint(274, 182);
  1142.     p.addPoint(274, 195);
  1143.     p.addPoint(270, 195);
  1144.     loc.getRegion().perim = p;
  1145.         initLocsFromRegion(loc, loc.getRegion());
  1146.  
  1147.     // Woodward Building ----------------------------
  1148.     loc = new Building(this,  new Point(183, 190));
  1149.     loc.setName("Woodward Library/IRC");
  1150.     loc.setURL("http://www.med.ubc.ca/");
  1151.     loc.initKeywords();
  1152.     loc.setInfoText("Woodward Building,\n"+
  1153.         "2194 Health Sciences Mall\n"+
  1154.         "\n        Contains:\n\n");
  1155.     loc.appendtoInfoText("Biomedical Communications Department");
  1156.     loc.appendtoInfoText("Dean of Pharmaceutical Sciences");
  1157.     loc.appendtoInfoText("Faculty of Medicine");
  1158.     loc.appendtoInfoText("Health Sciences Coordinator's Office");
  1159.     loc.appendtoInfoText("Health Service");
  1160.     loc.appendtoInfoText("Industry Liason Office");
  1161.     loc.appendtoInfoText("Instructional Resources Center");
  1162.     loc.appendtoInfoText("Office of Research Services");
  1163.     loc.appendtoInfoText("Woodward Biomedical Library");
  1164.     p = new Polygon();
  1165.     p.addPoint(280, 164);
  1166.     p.addPoint(286, 164);
  1167.     p.addPoint(286, 168);
  1168.     p.addPoint(290, 168);
  1169.     p.addPoint(290, 171);
  1170.     p.addPoint(286, 171);
  1171.     p.addPoint(285, 173);
  1172.     p.addPoint(290, 173);
  1173.     p.addPoint(290, 182);
  1174.     p.addPoint(287, 183);
  1175.     p.addPoint(287, 185);
  1176.     p.addPoint(288, 185);
  1177.     p.addPoint(289, 195);
  1178.     p.addPoint(277, 196);
  1179.     p.addPoint(277, 185);
  1180.     p.addPoint(280, 185);
  1181.     p.addPoint(280, 183);
  1182.     p.addPoint(275, 182);
  1183.     p.addPoint(275, 178);
  1184.     p.addPoint(273, 178);
  1185.     p.addPoint(274, 173);
  1186.     p.addPoint(280, 173);
  1187.     loc.getRegion().perim = p;
  1188.         initLocsFromRegion(loc, loc.getRegion());
  1189.  
  1190.     // Vancouver Hospital/UBC ----------------------------
  1191.     loc = new Building(this,  new Point(275, 150));
  1192.     loc.setName("Acute Care Hospital");
  1193.     loc.setURL("http://www.med.ubc.ca/");
  1194.     loc.initKeywords();
  1195.     loc.setInfoText("Vancouver Hospital\n"+
  1196.         "   & Health Sciences Centre,\n"+
  1197.         "   UBC Pavillion,\n"+
  1198.         "   2211 Wesbrook Mall\n"+
  1199.         "\n        Contains:\n\n");
  1200.     loc.appendtoInfoText("Acute Care Hosptial");
  1201.     loc.appendtoInfoText("Koerner Pavillion");
  1202.     loc.appendtoInfoText("Pathology Department");
  1203.     loc.appendtoInfoText("Psychiatry Department");
  1204.     loc.appendtoInfoText("Rehabilitation Medicine");
  1205.     loc.appendtoInfoText("School of Nursing");
  1206.     loc.appendtoInfoText("Student Health Services");
  1207.     p = new Polygon();
  1208.     p.addPoint(297, 155);
  1209.     p.addPoint(303, 155);
  1210.     p.addPoint(303, 163);
  1211.     p.addPoint(310, 163);
  1212.     p.addPoint(310, 156);
  1213.     p.addPoint(315, 156);
  1214.     p.addPoint(315, 163);
  1215.     p.addPoint(320, 162);
  1216.     p.addPoint(320, 168);
  1217.     p.addPoint(317, 168);
  1218.     p.addPoint(317, 183);
  1219.     p.addPoint(296, 184);
  1220.     p.addPoint(296, 168);
  1221.     p.addPoint(292, 168);
  1222.     p.addPoint(292, 163);
  1223.     p.addPoint(293, 163);
  1224.     p.addPoint(294, 158);
  1225.     p.addPoint(297, 158);
  1226.     loc.getRegion().perim = p;
  1227.         initLocsFromRegion(loc, loc.getRegion());
  1228.  
  1229.     // Library Processing Center ----------------------------
  1230.     loc = new Building(this,  new Point(284, 208));
  1231.     loc.setName("Library Processing Center");
  1232.     loc.setURL("http://www.library.ubc.ca/");
  1233.     loc.initKeywords();
  1234.     loc.setInfoText("Library Processing Center\n"+
  1235.         "   2206 East Mall\n");
  1236.     p = new Polygon();
  1237.     p.addPoint(280, 203);
  1238.     p.addPoint(289, 203);
  1239.     p.addPoint(289, 212);
  1240.     p.addPoint(286, 212);
  1241.     p.addPoint(286, 213);
  1242.     p.addPoint(280, 213);
  1243.     p.addPoint(280, 205);
  1244.     loc.getRegion().perim = p;
  1245.         initLocsFromRegion(loc, loc.getRegion());
  1246.  
  1247.     // Cunningham (Pharmacy) ----------------------------
  1248.     loc = new Building(this,  new Point(267, 207));
  1249.     loc.setName("Cunningham (Pharmacy)");
  1250.     loc.setURL("http://www.med.ubc.ca/");
  1251.     loc.initKeywords();
  1252.     loc.setInfoText("Cunningham Building (Pharmacy)\n"+
  1253.         "   2146 East Mall\n");
  1254.     p = new Polygon();
  1255.     p.addPoint(265, 200);
  1256.     p.addPoint(273, 200);
  1257.     p.addPoint(273, 203);
  1258.     p.addPoint(269, 203);
  1259.     p.addPoint(269, 214);
  1260.     p.addPoint(266, 214);
  1261.     p.addPoint(266, 213);
  1262.     p.addPoint(263, 213);
  1263.     p.addPoint(263, 211);
  1264.     p.addPoint(265, 211);
  1265.     p.addPoint(265, 200);
  1266.     loc.getRegion().perim = p;
  1267.         initLocsFromRegion(loc, loc.getRegion());
  1268.  
  1269.     // Wesbrook (Life Sciences) ----------------------------
  1270.     loc = new Building(this,  new Point(252, 208));
  1271.     loc.setName("Wesbrook Building");
  1272.     loc.setURL("http://www.science.ubc.ca/");
  1273.     loc.initKeywords();
  1274.     loc.setInfoText("Wesbrook Building\n"+
  1275.         "   6174 University Blvd\n"+
  1276.         "\n        Contains:\n\n");
  1277.     loc.appendtoInfoText("Biotechnology Lab");
  1278.     loc.appendtoInfoText("Medical Genetics Department");
  1279.     loc.appendtoInfoText("Center for Molecular Genetics");
  1280.     loc.appendtoInfoText("Microbiology Department");
  1281.     p = new Polygon();
  1282.     p.addPoint(250, 193);
  1283.     p.addPoint(254, 197);
  1284.     p.addPoint(250, 206);
  1285.     p.addPoint(258, 199);
  1286.     p.addPoint(261, 202);
  1287.     p.addPoint(254, 210);
  1288.     p.addPoint(263, 210);
  1289.     p.addPoint(263, 214);
  1290.     p.addPoint(251, 214);
  1291.     p.addPoint(246, 206);
  1292.     loc.getRegion().perim = p;
  1293.         initLocsFromRegion(loc, loc.getRegion());
  1294.  
  1295.     // Biomedical Research Center ----------------------------
  1296.     loc = new Building(this,  new Point(295, 190));
  1297.     loc.setName("Biomedical Research Center");
  1298.     loc.setURL("http://www.med.ubc.ca/");
  1299.     loc.initKeywords();
  1300.     loc.setInfoText("Biomedical Research Center\n"+
  1301.         "   2222 Health Sciences Mall\n");
  1302.     p = new Polygon();
  1303.     p.addPoint(298, 184);
  1304.     p.addPoint(300, 184);
  1305.     p.addPoint(300, 190);
  1306.     p.addPoint(302, 190);
  1307.     p.addPoint(302, 195);
  1308.     p.addPoint(292, 195);
  1309.     p.addPoint(292, 186);
  1310.     p.addPoint(298, 186);
  1311.     loc.getRegion().perim = p;
  1312.         initLocsFromRegion(loc, loc.getRegion());
  1313.  
  1314.     // Purdy Pavillion Extended Care Hospital ----------------------------
  1315.     loc = new Building(this,  new Point(327, 182));
  1316.     loc.setName("Extended Care Hospital");
  1317.     loc.setURL("http://www.med.ubc.ca/");
  1318.     loc.initKeywords();
  1319.     loc.setInfoText("Purdy Pavillion Extended Care Hospital\n"+
  1320.         "   2221 Wesbrook Mall\n");
  1321.     p = new Polygon();
  1322.     p.addPoint(325, 170);
  1323.     p.addPoint(327, 170);
  1324.     p.addPoint(327, 172);
  1325.     p.addPoint(331, 172);
  1326.     p.addPoint(331, 173);
  1327.     p.addPoint(333, 173);
  1328.     p.addPoint(333, 176);
  1329.     p.addPoint(331, 176);
  1330.     p.addPoint(331, 186);
  1331.     p.addPoint(332, 186);
  1332.     p.addPoint(332, 189);
  1333.     p.addPoint(331, 189);
  1334.     p.addPoint(331, 192);
  1335.     p.addPoint(325, 192);
  1336.     p.addPoint(325, 189);
  1337.     p.addPoint(322, 189);
  1338.     p.addPoint(322, 183);
  1339.     p.addPoint(320, 183);
  1340.     p.addPoint(320, 179);
  1341.     p.addPoint(325, 179);
  1342.     loc.getRegion().perim = p;
  1343.         initLocsFromRegion(loc, loc.getRegion());
  1344.  
  1345.     // Detwiller Pavillion Psychiatric Hospital ----------------------------
  1346.     loc = new Building(this,  new Point(130, 152));
  1347.     loc.setName("Psychiatric Hospital");
  1348.     loc.setURL("http://www.med.ubc.ca/");
  1349.     loc.initKeywords();
  1350.     loc.setInfoText("Detwiller Pavillion Psychiatric Hospital\n"+
  1351.         "   2255 Wesbrook Mall\n"+
  1352.         "\n        Contains:\n\n");
  1353.     loc.appendtoInfoText("Neurological Sciences");
  1354.     p = new Polygon();
  1355.     p.addPoint(334, 141);
  1356.     p.addPoint(339, 141);
  1357.     p.addPoint(339, 155);
  1358.     p.addPoint(338, 155);
  1359.     p.addPoint(338, 163);
  1360.     p.addPoint(334, 163);
  1361.     p.addPoint(334, 156);
  1362.     p.addPoint(328, 156);
  1363.     p.addPoint(328, 159);
  1364.     p.addPoint(331, 159);
  1365.     p.addPoint(331, 163);
  1366.     p.addPoint(324, 163);
  1367.     p.addPoint(324, 156);
  1368.     p.addPoint(322, 156);
  1369.     p.addPoint(322, 150);
  1370.     p.addPoint(325, 150);
  1371.     p.addPoint(325, 148);
  1372.     p.addPoint(327, 148);
  1373.     p.addPoint(327, 150);
  1374.     p.addPoint(332, 150);
  1375.     p.addPoint(332, 146);
  1376.     p.addPoint(334, 146);
  1377.     loc.getRegion().perim = p;
  1378.         initLocsFromRegion(loc, loc.getRegion());
  1379.  
  1380.     // General Services Administration Building ----------------------------
  1381.     loc = new Building(this,  new Point(230, 140));
  1382.     loc.setName("General Services Administration Building");
  1383.     loc.initKeywords();
  1384.     loc.setInfoText("General Services Administration Building,\n"+
  1385.         "2075 Wesbrook Mall\n"+
  1386.         "\n        Contains:\n\n");
  1387.     loc.appendtoInfoText("Admissions Office");
  1388.     loc.appendtoInfoText("Financial Services");
  1389.     loc.appendtoInfoText("Personnel Office");
  1390.     p = new Polygon();
  1391.     p.addPoint(229, 138);
  1392.     p.addPoint(246, 138);
  1393.     p.addPoint(246, 148);
  1394.     p.addPoint(239, 148);
  1395.     p.addPoint(239, 145);
  1396.     p.addPoint(236, 145);
  1397.     p.addPoint(236, 148);
  1398.     p.addPoint(229, 148);
  1399.     loc.getRegion().perim = p;
  1400.         initLocsFromRegion(loc, loc.getRegion());
  1401.  
  1402.     // Computer Science ----------------------------
  1403.     loc = new Building(this, new Point(345, 255));
  1404.     loc.setName("CICSR Building");
  1405.     loc.setURL("http://www.cs.ubc.ca");
  1406.     loc.initKeywords();
  1407.     loc.setInfoText("CICSR Building\n"+
  1408.             "2366 Main Mall,\n"+
  1409.             "Vancouver, British Columbia,\n"+
  1410.             "Canada V6T 1Z1\n"+
  1411.             "\n      Contains:\n\n");
  1412.     loc.appendtoInfoText("Center for Integrated Computer Systems Research");
  1413.     loc.appendtoInfoText("Computer Science Department");
  1414.     loc.appendtoInfoText("Computer Science Library");
  1415.  
  1416.     p = new Polygon();
  1417.     p.addPoint(345, 255);
  1418.     p.addPoint(360, 255);
  1419.     p.addPoint(360, 265);
  1420.     p.addPoint(345, 265);
  1421.     loc.getRegion().perim = p;
  1422.         initLocsFromRegion(loc, loc.getRegion());
  1423.  
  1424.     // Main Library ----------------------------
  1425.     loc = new Building(this, new Point(170,235));
  1426.     loc.setName("Main Library");
  1427.     loc.setURL("http://www.library.ubc.ca");
  1428.     loc.initKeywords();
  1429.     loc.setInfoText("Main Library\n"+
  1430.             "1956 East Mall,\n"+
  1431.             "Vancouver, British Columbia,\n"+
  1432.             "Canada \n"+
  1433.             "\n      Contains:\n\n");
  1434.     loc.appendtoInfoText("Library Circulation");
  1435.     loc.appendtoInfoText("Data Library");
  1436.     loc.appendtoInfoText("Special Collections");
  1437.  
  1438.     p = new Polygon();
  1439.     p.addPoint(163, 226);
  1440.     p.addPoint(181, 226);
  1441.     p.addPoint(181, 230);
  1442.     p.addPoint(185, 230);
  1443.     p.addPoint(185, 237);
  1444.     p.addPoint(179, 237);
  1445.     p.addPoint(180, 239);
  1446.     p.addPoint(176, 239);
  1447.     p.addPoint(176, 241);
  1448.     p.addPoint(169, 242);
  1449.     p.addPoint(169, 239);
  1450.     p.addPoint(165, 239);
  1451.     p.addPoint(165, 237);
  1452.     p.addPoint(159, 237);
  1453.     p.addPoint(159, 234);
  1454.     p.addPoint(163, 234);
  1455.     loc.getRegion().perim = p;
  1456.         initLocsFromRegion(loc, loc.getRegion());
  1457.  
  1458.     // Book Store --------------------------------------------------
  1459.     loc = new Building(this, new Point(242,225));
  1460.     loc.setName("Bookstore");
  1461.     loc.setURL("http://www.bookstore.ubc.ca");
  1462.     loc.initKeywords();
  1463.     loc.setInfoText("Bookstore\n"+
  1464.             "6200 University Blvd,\n"+
  1465.             "Vancouver, British Columbia,\n"+
  1466.             "Canada \n"+
  1467.             "\n    Contains:\n\n");
  1468.     loc.appendtoInfoText("Oceanography Department");
  1469.     loc.appendtoInfoText("NCE Labs");
  1470.     loc.appendtoInfoText("Bookstore");
  1471.     loc.appendtoInfoText("Computer shop");
  1472.     loc.appendtoInfoText("Post Office");
  1473.     loc.addKeyword("Payphone");
  1474.     loc.addKeyword("Public Attraction");
  1475.     p = new Polygon();
  1476.     p.addPoint(243, 226);
  1477.     p.addPoint(255, 227);
  1478.     p.addPoint(255, 226);
  1479.     p.addPoint(264, 225);
  1480.     p.addPoint(265, 227);
  1481.     p.addPoint(262, 231);
  1482.     p.addPoint(262, 233);
  1483.     p.addPoint(261, 234);
  1484.     p.addPoint(261, 236);
  1485.     p.addPoint(253, 237);
  1486.     p.addPoint(253, 238);
  1487.     p.addPoint(251, 238);
  1488.     p.addPoint(251, 237);
  1489.     p.addPoint(246, 237);
  1490.     p.addPoint(246, 235);
  1491.     p.addPoint(242, 235);
  1492.     loc.getRegion().perim = p;    
  1493.         initLocsFromRegion(loc, loc.getRegion());
  1494.  
  1495.     // Biological Sciences Building-----------------------------------
  1496.     loc = new Building(this, new Point(241,245));
  1497.     loc.setName("Biological Sciences Building");
  1498.     loc.setURL("http://www.science.ubc.ca");
  1499.     loc.setInfoText("Biological Sciences Building\n"+
  1500.             "6270 University Blvd,\n"+
  1501.             "\n    Contains:\n"+
  1502.             "Faculty of Science");
  1503.     loc.initKeywords();
  1504.     loc.addKeyword("Faculty of Science");
  1505.     loc.addKeyword("Dean of Science");
  1506.     p = new Polygon();
  1507.     p.addPoint(239, 242);
  1508.     p.addPoint(243, 242);
  1509.     p.addPoint(243, 249);
  1510.     p.addPoint(249, 249);
  1511.     p.addPoint(249, 243);
  1512.     p.addPoint(254, 243);
  1513.     p.addPoint(254, 249);
  1514.     p.addPoint(256, 251);
  1515.     p.addPoint(258, 250);
  1516.     p.addPoint(258, 243);
  1517.     p.addPoint(266, 242);
  1518.     p.addPoint(266, 245);
  1519.     p.addPoint(264, 245);
  1520.     p.addPoint(264, 261);
  1521.     p.addPoint(267, 260);
  1522.     p.addPoint(267, 265);
  1523.     p.addPoint(244, 265);
  1524.     p.addPoint(239, 260);
  1525.     loc.getRegion().perim = p;    
  1526.         initLocsFromRegion(loc, loc.getRegion());
  1527.  
  1528.     // Scarfe Building-----------------------------------
  1529.     loc = new Building(this, new Point(240,285));
  1530.     loc.setName("Scarfe Building");
  1531.     loc.setURL("http://www.educ.ubc.ca");
  1532.     loc.initKeywords();
  1533.     loc.setInfoText("Scarfe Building\n"+
  1534.             "2125 Main Mall,\n"+
  1535.             "\n    Contains:\n\n");
  1536.     loc.appendtoInfoText("Dean of Education");
  1537.     loc.appendtoInfoText("Education Library/Curriculum Laboratory");
  1538.     loc.appendtoInfoText("Faculty of Education");
  1539.     p = new Polygon();
  1540.     p.addPoint(237, 280);
  1541.     p.addPoint(243, 280);
  1542.     p.addPoint(244, 282);
  1543.     p.addPoint(247, 281);
  1544.     p.addPoint(247, 278);
  1545.     p.addPoint(252, 278);
  1546.     p.addPoint(251, 282);
  1547.     p.addPoint(258, 281);
  1548.     p.addPoint(259, 277);
  1549.     p.addPoint(262, 278);
  1550.     p.addPoint(261, 289);
  1551.     p.addPoint(257, 290);
  1552.     p.addPoint(257, 288);
  1553.     p.addPoint(255, 292);
  1554.     p.addPoint(250, 294);
  1555.     p.addPoint(250, 289);
  1556.     p.addPoint(244, 289);
  1557.     p.addPoint(243, 296);
  1558.     p.addPoint(237, 296);
  1559.     loc.getRegion().perim = p;    
  1560.         initLocsFromRegion(loc, loc.getRegion());
  1561.  
  1562.     // Geophysics Building ----------------------------
  1563.     loc = new Building(this, new Point(290,284));
  1564.     loc.setName("Geophysics Building");
  1565.     loc.setURL("http://www.geop.ubc.ca");
  1566.     loc.setInfoText("Geophysics Building\n"+
  1567.             "2219 Main Mall,\n"+
  1568.             "\n    Contains:\n"+
  1569.             "Geophysics and Astronomy Department");
  1570.     loc.initKeywords();
  1571.     loc.addKeyword("Geophysics Building");
  1572.     loc.addKeyword("Geophysics and Astronomy Department");
  1573.     loc.addKeyword("Astronomical Observatory");
  1574.     p = new Polygon();
  1575.     p.addPoint(281, 282);
  1576.     p.addPoint(287, 282);
  1577.     p.addPoint(287, 280);
  1578.     p.addPoint(294, 280);
  1579.     p.addPoint(294, 282);
  1580.     p.addPoint(300, 282);
  1581.     p.addPoint(299, 286);
  1582.     p.addPoint(281, 286);
  1583.     loc.getRegion().perim = p;    
  1584.         initLocsFromRegion(loc, loc.getRegion());
  1585.  
  1586.     // Geological Sciences Building ----------------------------
  1587.     loc = new Building(this, new Point(285,295));
  1588.     loc.setName("Geological Sciences Building");
  1589.     loc.setURL("http://www.geology.ubc.ca");
  1590.     loc.setInfoText("Geological Sciences Building\n"+
  1591.             "6339 Stores Road,\n"+
  1592.             "\n    Contains:\n"+
  1593.             "Geological Sciences Department\n"+
  1594.             "Geological Museum (M.Y Williams)\n");
  1595.     loc.initKeywords();
  1596.     loc.addKeyword("Geological Sciences Building");
  1597.     loc.addKeyword("Geological Sciences Department");
  1598.     loc.addKeyword("Geological Museum (M.Y Williams)");
  1599.     loc.addKeyword("Public Attraction");
  1600.     p = new Polygon();
  1601.     p.addPoint(281, 290);
  1602.     p.addPoint(290, 290);
  1603.     p.addPoint(290, 295);
  1604.     p.addPoint(294, 294);
  1605.     p.addPoint(294, 297);
  1606.     p.addPoint(302, 296);
  1607.     p.addPoint(302, 301);
  1608.     p.addPoint(298, 302);
  1609.     p.addPoint(298, 298);
  1610.     p.addPoint(294, 298);
  1611.     p.addPoint(294, 303);
  1612.     p.addPoint(281, 303);
  1613.     loc.getRegion().perim = p;    
  1614.         initLocsFromRegion(loc, loc.getRegion());
  1615.  
  1616.     // Ponderosa Building  ----------------------------
  1617.     loc = new Building(this,  new Point(220, 330));
  1618.     loc.setName("Ponderosa Building");
  1619.     loc.initKeywords();
  1620.     loc.setInfoText("Ponderosa Building,\n"+
  1621.         "2071 West Mall,\n"+
  1622.         "\n    Contains:\n\n");
  1623.     loc.appendtoInfoText("Food Services Department");
  1624.     loc.appendtoInfoText("Ponderosa Cafeteria");
  1625.     loc.addKeyword("Payphone");
  1626.     p = new Polygon();
  1627.     p.addPoint(216, 325);
  1628.     p.addPoint(226, 325);
  1629.     p.addPoint(226, 335);
  1630.     p.addPoint(216, 335);
  1631.     loc.getRegion().perim = p;
  1632.         initLocsFromRegion(loc, loc.getRegion());
  1633.  
  1634.     // Campus Planning and Development ----------------------------
  1635.     loc = new Building(this, new Point(290,313));
  1636.     loc.setName("Campus Planning and Development");
  1637.     loc.setURL("http://www.cpd.ubc.ca");
  1638.     loc.setInfoText("Campus Planning and Development\n"+
  1639.             "2210 West Mall,\n");
  1640.     loc.initKeywords();
  1641.     loc.addKeyword("Campus Planning and Development");
  1642.     p = new Polygon();
  1643.     p.addPoint(286, 310);
  1644.     p.addPoint(297, 310);
  1645.     p.addPoint(297, 315);
  1646.     p.addPoint(286, 315);
  1647.     loc.getRegion().perim = p;    
  1648.         initLocsFromRegion(loc, loc.getRegion());
  1649.  
  1650.     // Kenny Building (Psychology) ----------------------------
  1651.     loc = new Building(this, new Point(255,305));
  1652.     loc.setName("Kenny Building");
  1653.     loc.setURL("http://www.psych.ubc.ca");
  1654.     loc.setInfoText("Douglas T. Kenny Building\n"+
  1655.             "2136 West Mall,\n"+
  1656.             "\n    Contains:\n"+
  1657.             "Psychology Department\n");
  1658.     loc.initKeywords();
  1659.     loc.addKeyword("Douglas T. Kenny Building");
  1660.     loc.addKeyword("Psychology Department");
  1661.     p = new Polygon();
  1662.     p.addPoint(250, 303);
  1663.     p.addPoint(264, 303);
  1664.     p.addPoint(264, 311);
  1665.     p.addPoint(266, 311);
  1666.     p.addPoint(266, 315);
  1667.     p.addPoint(252, 315);
  1668.     p.addPoint(252, 312);
  1669.     p.addPoint(247, 312);
  1670.     p.addPoint(247, 309);
  1671.     p.addPoint(250, 309);
  1672.     loc.getRegion().perim = p;    
  1673.         initLocsFromRegion(loc, loc.getRegion());
  1674.  
  1675.     // Power House  ----------------------------
  1676.     loc = new Building(this, new Point(202,300));
  1677.     loc.setName("Power House");
  1678.     loc.initKeywords();
  1679.     loc.setInfoText("Power House\n"+
  1680.             "2040 West Mall\n");
  1681.     p = new Polygon();
  1682.     p.addPoint(200, 291);
  1683.     p.addPoint(209, 291);
  1684.     p.addPoint(209, 299);
  1685.     p.addPoint(210, 299);
  1686.     p.addPoint(210, 305);
  1687.     p.addPoint(205, 305);
  1688.     p.addPoint(205, 296);
  1689.     p.addPoint(200, 296);
  1690.     loc.getRegion().perim = p;    
  1691.         initLocsFromRegion(loc, loc.getRegion());
  1692.  
  1693.     // Social Work  ----------------------------
  1694.     loc = new Building(this, new Point(220,310));
  1695.     loc.setName("Social Work");
  1696.     loc.setURL("http://www.arts.ubc.ca/arts/social/social.html");
  1697.     loc.initKeywords();
  1698.     loc.setInfoText("Social Work\n"+
  1699.             "2080 West Mall\n"+
  1700.             "\n    Contains:\n\n");
  1701.     loc.appendtoInfoText("School of Social Work");
  1702.     p = new Polygon();
  1703.     p.addPoint(217, 310);
  1704.     p.addPoint(227, 310);
  1705.     p.addPoint(227, 313);
  1706.     p.addPoint(217, 313);
  1707.     loc.getRegion().perim = p;    
  1708.         initLocsFromRegion(loc, loc.getRegion());
  1709.  
  1710.     // Arts One Office ----------------------------
  1711.     loc = new Building(this, new Point(245,303));
  1712.     loc.setName("Arts One");
  1713.     loc.setURL("http://www.arts.ubc.ca/arts/arts1/arts1.htm");
  1714.     loc.setInfoText("Arts One General Office\n"+
  1715.             "6358 University Blvd");
  1716.     loc.initKeywords();
  1717.     loc.addKeyword("Arts One General Office");
  1718.     p = new Polygon();
  1719.     p.addPoint(242, 300);
  1720.     p.addPoint(248, 300);
  1721.     p.addPoint(248, 304);
  1722.     p.addPoint(245, 304);
  1723.     p.addPoint(245, 306);
  1724.     p.addPoint(242, 306);
  1725.     loc.getRegion().perim = p;    
  1726.         initLocsFromRegion(loc, loc.getRegion());
  1727.  
  1728.     // West Parkade ----------------------------
  1729.     loc = new Building(this, new Point(260,330));
  1730.     loc.setName("West Parkade");
  1731.     loc.setURL("http://www.interchg.ubc.ca/pass/");
  1732.     loc.setInfoText("West Parkade\n"+
  1733.             "2150 Lower Mall");
  1734.     loc.initKeywords();
  1735.     loc.addKeyword("West Parkade");
  1736.     loc.addKeyword("Parking");
  1737.     loc.addKeyword("Public Parking");
  1738.     loc.addKeyword("Payphone");
  1739.     p = new Polygon();
  1740.     p.addPoint(256, 325);
  1741.     p.addPoint(262, 325);
  1742.     p.addPoint(262, 323);
  1743.     p.addPoint(270, 323);
  1744.     p.addPoint(270, 326);
  1745.     p.addPoint(276, 326);
  1746.     p.addPoint(276, 335);
  1747.     p.addPoint(278, 335);
  1748.     p.addPoint(278, 344);
  1749.     p.addPoint(272, 344);
  1750.     p.addPoint(272, 345);
  1751.     p.addPoint(262, 345);
  1752.     p.addPoint(262, 343);
  1753.     p.addPoint(254, 343);
  1754.     p.addPoint(254, 333);
  1755.     p.addPoint(256, 333);
  1756.     loc.getRegion().perim = p;    
  1757.         initLocsFromRegion(loc, loc.getRegion());
  1758.  
  1759.     // North Parkade ----------------------------
  1760.     loc = new Building(this, new Point(145,175));
  1761.     loc.setName("North Parkade");
  1762.     loc.setURL("http://www.interchg.ubc.ca/pass/");
  1763.     loc.setInfoText("North Parkade\n"+
  1764.             "6150 Student Union Blvd");
  1765.     loc.initKeywords();
  1766.     loc.addKeyword("North Parkade");
  1767.     loc.addKeyword("Parking");
  1768.     loc.addKeyword("Public Parking");
  1769.     loc.addKeyword("Payphone");
  1770.     p = new Polygon();
  1771.     p.addPoint(141, 174);
  1772.     p.addPoint(160, 174);
  1773.     p.addPoint(160, 177);
  1774.     p.addPoint(162, 177);
  1775.     p.addPoint(162, 185);
  1776.     p.addPoint(163, 185);
  1777.     p.addPoint(163, 191);
  1778.     p.addPoint(162, 191);
  1779.     p.addPoint(162, 193);
  1780.     p.addPoint(145, 193);
  1781.     p.addPoint(145, 191);
  1782.     p.addPoint(143, 191);
  1783.     p.addPoint(143, 184);
  1784.     p.addPoint(141, 184);
  1785.     loc.getRegion().perim = p;    
  1786.         initLocsFromRegion(loc, loc.getRegion());
  1787.  
  1788.     // Fraser River Parkade ----------------------------
  1789.     loc = new Building(this, new Point(155,330));
  1790.     loc.setName("Fraser River Parkade");
  1791.     loc.setURL("http://www.interchg.ubc.ca/pass/");
  1792.     loc.setInfoText("Fraser River Parkade\n"+
  1793.             "1900 Lower Mall");
  1794.     loc.initKeywords();
  1795.     loc.addKeyword("Fraser River Parkade");
  1796.     loc.addKeyword("Parking");
  1797.     loc.addKeyword("Public Parking");
  1798.     loc.addKeyword("Payphone");
  1799.     p = new Polygon();
  1800.     p.addPoint(153, 327);
  1801.     p.addPoint(167, 327);
  1802.     p.addPoint(166, 331);
  1803.     p.addPoint(168, 331);
  1804.     p.addPoint(168, 347);
  1805.     p.addPoint(153, 347);
  1806.     loc.getRegion().perim = p;    
  1807.         initLocsFromRegion(loc, loc.getRegion());
  1808.  
  1809.     // Health Sciences Parkade ----------------------------
  1810.     loc = new Building(this, new Point(300,205));
  1811.     loc.setName("Health Sciences Parkade");
  1812.     loc.setURL("http://www.interchg.ubc.ca/pass/");
  1813.     loc.setInfoText("Health Sciences Parkade\n"+
  1814.             "2300 Health Sciences Mall");
  1815.     loc.initKeywords();
  1816.     loc.addKeyword("Health Sciences Parkade");
  1817.     loc.addKeyword("Parking");
  1818.     loc.addKeyword("Public Parking");
  1819.     loc.addKeyword("Payphone");
  1820.     p = new Polygon();
  1821.     p.addPoint(295, 202);
  1822.     p.addPoint(320, 202);
  1823.     p.addPoint(320, 217);
  1824.     p.addPoint(295, 217);
  1825.     loc.getRegion().perim = p;    
  1826.         initLocsFromRegion(loc, loc.getRegion());
  1827.  
  1828.     // University Services Building ----------------------------
  1829.     loc = new Building(this, new Point(295,330));
  1830.     loc.setName("University Services Building");
  1831.     loc.setURL("http://www.plantops.ubc.ca");
  1832.     loc.setInfoText("University Services Building\n"+
  1833.             "2329 West Mall,\n"+
  1834.             "\n    Contains:\n"+
  1835.             "Plant Operations\n"+
  1836.             "Media Services\n"+
  1837.             "Language Institute");
  1838.     loc.initKeywords();
  1839.     loc.addKeyword("University Services Building");
  1840.     loc.addKeyword("Plant Operations");
  1841.     loc.addKeyword("Media Services");
  1842.     loc.addKeyword("Language Institute");
  1843.     p = new Polygon();
  1844.     p.addPoint(290, 327);
  1845.     p.addPoint(298, 327);
  1846.     p.addPoint(298, 330);
  1847.     p.addPoint(302, 330);
  1848.     p.addPoint(302, 328);
  1849.     p.addPoint(315, 328);
  1850.     p.addPoint(315, 330);
  1851.     p.addPoint(318, 330);
  1852.     p.addPoint(318, 327);
  1853.     p.addPoint(327, 327);
  1854.     p.addPoint(327, 340);
  1855.     p.addPoint(317, 340);
  1856.     p.addPoint(317, 339);
  1857.     p.addPoint(299, 339);
  1858.     p.addPoint(299, 342);
  1859.     p.addPoint(290, 342);
  1860.     loc.getRegion().perim = p;    
  1861.         initLocsFromRegion(loc, loc.getRegion());
  1862.  
  1863.     // Bus Loop --------------------------------------------------
  1864.     loc = new Building(this, new Point(230,200));
  1865.     loc.setName("Bus Loop");
  1866.     loc.setURL("http://view.ubc.ca/1/admin-and-campus/bus-schedules");
  1867.     loc.setInfoText("BC Transit UBC Bus Loop\n"+
  1868.             "6100 block,\n"+
  1869.             "University Blvd,\n");
  1870.     loc.initKeywords();
  1871.     loc.addKeyword("Bus Loop");
  1872.     loc.addKeyword("Bus Stop");
  1873.     loc.addKeyword("Payphone");
  1874.     p = new Polygon();
  1875.     p.addPoint(228,197);
  1876.     p.addPoint(240,197);
  1877.     p.addPoint(235,216);
  1878.     p.addPoint(231,215);
  1879.     p.addPoint(225,212);
  1880.     p.addPoint(223,210);
  1881.     p.addPoint(225,205);
  1882.     loc.getRegion().perim = p;
  1883.         initLocsFromRegion(loc, loc.getRegion());
  1884.  
  1885.     // Graduate Student Center  -------------------------------------------
  1886.     loc = new Building(this, new Point(100,295));
  1887.     loc.setName("Thea Koerner House");
  1888.     loc.setURL("http://www.gss.ubc.ca/");
  1889.     loc.setInfoText("Thea Koerner House\n"+
  1890.             "Grad Student Center");
  1891.     loc.initKeywords();
  1892.     loc.addKeyword("Thea Koerner House");
  1893.     loc.addKeyword("Grad Student Center");
  1894.     loc.addKeyword("Garden Lounge");
  1895.     loc.addKeyword("Fireside Lounge");
  1896.     loc.addKeyword("Payphone");
  1897.     loc.addKeyword("Graduate Student Society");
  1898.     p = new Polygon();
  1899.     p.addPoint(100,295);
  1900.     p.addPoint(105,295);
  1901.     p.addPoint(105,305);
  1902.     p.addPoint(100,305);
  1903.     loc.getRegion().perim = p;
  1904.         initLocsFromRegion(loc, loc.getRegion());
  1905.  
  1906.     // Graduate Student Center  --------------------------------------------
  1907.     loc = new Building(this, new Point(105,300));
  1908.     loc.setName("Faculty of Graduate Studies");
  1909.     loc.setURL("http://www.grad.ubc.ca/");
  1910.     loc.setInfoText("Faculty of Graduate Studies\n"+
  1911.             "6371 Crescent Road,\n"+
  1912.             "University of British Columbia");
  1913.     loc.initKeywords();
  1914.     loc.addKeyword("Graduate Studies");
  1915.     loc.addKeyword("Dean of Graduate Studies");
  1916.     p = new Polygon();
  1917.     p.addPoint(105,300);
  1918.     p.addPoint(115,300);
  1919.     p.addPoint(115,310);
  1920.     p.addPoint(105,310);
  1921.     loc.getRegion().perim = p;
  1922.         initLocsFromRegion(loc, loc.getRegion());
  1923.  
  1924.     // Asian Center  --------------------------------------------------
  1925.     loc = new Building(this,140, 340);
  1926.     loc.setDisplayable(true);
  1927.     loc.initKeywords();
  1928.     loc.setName("Asian Center");
  1929.     loc.setInfoText("Asian Center\n"+
  1930.         "1871 West Mall,\n"+
  1931.         "\n     Contains:\n\n");
  1932.     loc.appendtoInfoText("Asian Studies Department");
  1933.     loc.appendtoInfoText("Asian Studies Library");
  1934.     loc.appendtoInfoText("Institute of Asian Research");
  1935.     loc.addKeyword("Public Attraction");
  1936.     p = new Polygon();
  1937.     p.addPoint(134, 334);
  1938.     p.addPoint(144, 334);
  1939.     p.addPoint(144, 346);
  1940.     p.addPoint(134, 346);
  1941.     loc.getRegion().perim = p;
  1942.         initLocsFromRegion(loc, loc.getRegion());
  1943.  
  1944.     // Museum of Anthropology  --------------------------------------------------
  1945.     loc = new Building(this,67, 315);
  1946.     loc.initKeywords();
  1947.     loc.setName("Museum of Anthropology");
  1948.     loc.setInfoText("Museum of Anthropology\n"+
  1949.         "6393 Northwest Marine Drive");
  1950.     loc.addKeyword("Public Attraction");
  1951.     loc.addKeyword("Payphone");
  1952.     p = new Polygon();
  1953.     p.addPoint(64, 297);
  1954.     p.addPoint(79, 318);
  1955.     p.addPoint(77, 319);
  1956.     p.addPoint(82, 325);
  1957.     p.addPoint(80, 327);
  1958.     p.addPoint(80, 329);
  1959.     p.addPoint(78, 331);
  1960.     p.addPoint(75, 327);
  1961.     p.addPoint(72, 331);
  1962.     p.addPoint(70, 331);
  1963.     p.addPoint(69, 330);
  1964.     p.addPoint(66, 331);
  1965.     p.addPoint(63, 329);
  1966.     p.addPoint(63, 323);
  1967.     p.addPoint(59, 317);
  1968.     p.addPoint(59, 314);
  1969.     p.addPoint(58, 313);
  1970.     p.addPoint(60, 312);
  1971.     p.addPoint(58, 311);
  1972.     p.addPoint(60, 310);
  1973.     p.addPoint(59, 308);
  1974.     p.addPoint(62, 304);
  1975.     p.addPoint(60, 301);
  1976.     loc.getRegion().perim = p;
  1977.         initLocsFromRegion(loc, loc.getRegion());
  1978.  
  1979.     // Nitobe gardens  --------------------------------------------------
  1980.     loc = new Park(this,120, 350);
  1981.     loc.setName("Nitobe Memorial Garden");
  1982.     loc.initKeywords();
  1983.     loc.setInfoText("Nitobe Memorial Garden,\n"+
  1984.             "A classical Japanese Garden");
  1985.     loc.addKeyword("Public Attraction");
  1986.     p = new Polygon();
  1987.     p.addPoint(117, 351);
  1988.     p.addPoint(156, 351);
  1989.     p.addPoint(156, 383);
  1990.     p.addPoint(150, 378);
  1991.     p.addPoint(146, 375);
  1992.     p.addPoint(143, 374);
  1993.     p.addPoint(139, 371);
  1994.     p.addPoint(136, 369);
  1995.     p.addPoint(131, 366);
  1996.     p.addPoint(128, 363);
  1997.     p.addPoint(124, 359);
  1998.     p.addPoint(123, 357);
  1999.     p.addPoint(121, 355);
  2000.     p.addPoint(118, 352);
  2001.     loc.getRegion().perim = p;
  2002.         initLocsFromRegion(loc, loc.getRegion());
  2003.  
  2004.     // Asian Garden  --------------------------------------------------
  2005.     loc = new Park(this,500, 375);
  2006.     loc.setName("Asian Garden");
  2007.     loc.initKeywords();
  2008.     loc.addKeyword("Asian Garden");
  2009.     loc.addKeyword("Public Attraction");
  2010.     p = new Polygon();
  2011.     p.addPoint(494, 369);
  2012.     p.addPoint(503, 367);
  2013.     p.addPoint(518, 365);
  2014.     p.addPoint(532, 364);
  2015.     p.addPoint(548, 361);
  2016.     p.addPoint(561, 357);
  2017.     p.addPoint(576, 352);
  2018.     p.addPoint(582, 349);
  2019.     p.addPoint(583, 348);
  2020.     p.addPoint(583, 386);
  2021.     p.addPoint(576, 388);
  2022.     p.addPoint(563, 391);
  2023.     p.addPoint(549, 394);
  2024.     p.addPoint(526, 398);
  2025.     p.addPoint(507, 401);
  2026.     p.addPoint(493, 403);
  2027.     p.addPoint(488, 403);
  2028.     p.addPoint(485, 402);
  2029.     p.addPoint(482, 400);
  2030.     p.addPoint(482, 396);
  2031.     p.addPoint(485, 390);
  2032.     p.addPoint(491, 382);
  2033.     p.addPoint(496, 373);
  2034.     loc.getRegion().perim = p;
  2035.         initLocsFromRegion(loc, loc.getRegion());
  2036.  
  2037.     // Botanical Garden  --------------------------------------------------
  2038.     loc = new Park(this,510, 300);
  2039.     loc.setName("Botanical Garden");
  2040.     loc.initKeywords();
  2041.     loc.addKeyword("Botanical Garden");
  2042.     loc.addKeyword("Public Attraction");
  2043.     p = new Polygon();
  2044.     p.addPoint(511, 300);
  2045.     p.addPoint(513, 302);
  2046.     p.addPoint(517, 305);
  2047.     p.addPoint(522, 308);
  2048.     p.addPoint(530, 309);
  2049.     p.addPoint(538, 308);
  2050.     p.addPoint(543, 305);
  2051.     p.addPoint(547, 300);
  2052.     p.addPoint(549, 297);
  2053.     p.addPoint(554, 294);
  2054.     p.addPoint(559, 292);
  2055.     p.addPoint(564, 291);
  2056.     p.addPoint(569, 291);
  2057.     p.addPoint(569, 333);
  2058.     p.addPoint(569, 335);
  2059.     p.addPoint(567, 338);
  2060.     p.addPoint(565, 341);
  2061.     p.addPoint(562, 343);
  2062.     p.addPoint(558, 346);
  2063.     p.addPoint(553, 348);
  2064.     p.addPoint(547, 351);
  2065.     p.addPoint(536, 353);
  2066.     p.addPoint(527, 354);
  2067.     p.addPoint(517, 354);
  2068.     p.addPoint(512, 352);
  2069.     p.addPoint(509, 352);
  2070.     p.addPoint(504, 349);
  2071.     p.addPoint(502, 346);
  2072.     p.addPoint(500, 342);
  2073.     p.addPoint(499, 339);
  2074.     p.addPoint(501, 338);
  2075.     p.addPoint(504, 336);
  2076.     p.addPoint(506, 335);
  2077.     p.addPoint(508, 332);
  2078.     p.addPoint(508, 327);
  2079.     p.addPoint(508, 317);
  2080.     p.addPoint(509, 306);
  2081.     p.addPoint(510, 303);
  2082.     loc.getRegion().perim = p;
  2083.         initLocsFromRegion(loc, loc.getRegion());
  2084.  
  2085.     // Rose Garden  --------------------------------------------------
  2086.     loc = new Park(this,100, 265);
  2087.     loc.setName("Rose Garden");
  2088.     loc.initKeywords();
  2089.     loc.addKeyword("Rose Garden");
  2090.     loc.addKeyword("Public Attraction");
  2091.     p = new Polygon();
  2092.     p.addPoint(93, 261);
  2093.     p.addPoint(103, 261);
  2094.     p.addPoint(105, 262);
  2095.     p.addPoint(106, 273);
  2096.     p.addPoint(104, 272);
  2097.     p.addPoint(93, 271);
  2098.     loc.getRegion().perim = p;
  2099.         initLocsFromRegion(loc, loc.getRegion());
  2100.  
  2101.     // Rose Garden Parkade ----------------------------------------------
  2102.     loc = new Building(this,100, 265);
  2103.     loc.setName("Rose Garden Parkade");
  2104.     loc.setURL("http://www.interchg.ubc.ca/pass/");
  2105.     loc.setInfoText("Rose Garden Underground Parkade\n"+
  2106.             "6200 Crescent Road");
  2107.     loc.initKeywords();
  2108.     loc.addKeyword("Rose Garden Parkade");
  2109.     loc.addKeyword("Visitor Parking");
  2110.     p = new Polygon();
  2111.     p.addPoint(87, 260);
  2112.     p.addPoint(93, 261);
  2113.     p.addPoint(93, 271);
  2114.     p.addPoint(87, 271);
  2115.     loc.getRegion().perim = p;
  2116.         initLocsFromRegion(loc, loc.getRegion());
  2117.  
  2118.     // Forintek Building  ----------------------------
  2119.     loc = new Building(this,  new Point(480, 235));
  2120.     loc.setName("Forintek Building");
  2121.     loc.initKeywords();
  2122.     loc.setInfoText("Forintek Building,\n"+
  2123.         "2665 East Mall,\n");
  2124.     p = new Polygon();
  2125.     p.addPoint(476, 232);
  2126.     p.addPoint(484, 232);
  2127.     p.addPoint(484, 235);
  2128.     p.addPoint(490, 235);
  2129.     p.addPoint(490, 233);
  2130.     p.addPoint(492, 233);
  2131.     p.addPoint(492, 235);
  2132.     p.addPoint(500, 234);
  2133.     p.addPoint(501, 248);
  2134.     p.addPoint(491, 248);
  2135.     p.addPoint(491, 250);
  2136.     p.addPoint(490, 250);
  2137.     p.addPoint(489, 248);
  2138.     p.addPoint(476, 248);
  2139.     loc.getRegion().perim = p;
  2140.         initLocsFromRegion(loc, loc.getRegion());
  2141.  
  2142.     // Family and Nutritional Sciences  ----------------------------
  2143.     loc = new Building(this,  new Point(275, 230));
  2144.     loc.setName("Family & Nut'l Sciences Building");
  2145.     loc.initKeywords();
  2146.     loc.setInfoText("Family & Nut'l Sciences Building,\n"+
  2147.         "2205 East Mall");
  2148.     p = new Polygon();
  2149.     p.addPoint(272, 227);
  2150.     p.addPoint(282, 227);
  2151.     p.addPoint(282, 234);
  2152.     p.addPoint(278, 234);
  2153.     p.addPoint(279, 232);
  2154.     p.addPoint(277, 232);
  2155.     p.addPoint(277, 241);
  2156.     p.addPoint(272, 241);
  2157.     loc.getRegion().perim = p;
  2158.         initLocsFromRegion(loc, loc.getRegion());
  2159.  
  2160.     // Fisheries Center  ----------------------------
  2161.     loc = new Building(this, new Point(282,263));
  2162.     loc.setName("Fisheries Center");
  2163.     loc.initKeywords();
  2164.     loc.setInfoText("Fisheries Center,\n"+
  2165.         "2204 Main Mall\n");
  2166.     p = new Polygon();
  2167.     p.addPoint(277, 257);
  2168.     p.addPoint(287, 257);
  2169.     p.addPoint(287, 266);
  2170.     p.addPoint(277, 266);
  2171.     loc.getRegion().perim = p;
  2172.         initLocsFromRegion(loc, loc.getRegion());
  2173.  
  2174.     // Chemical Engineering  ----------------------------
  2175.     loc = new Building(this, new Point(290,240));
  2176.     loc.setName("Chemical Engineering");
  2177.     loc.setURL("http://www.apsc.ubc.ca/cgi-win/apscweb.exe/d/chml");
  2178.     loc.initKeywords();
  2179.     loc.setInfoText("Chemical Engineering Building,\n"+
  2180.         "2216 Main Mall\n");
  2181.     p = new Polygon();
  2182.     p.addPoint(288, 237);
  2183.     p.addPoint(293, 237);
  2184.     p.addPoint(293, 251);
  2185.     p.addPoint(288, 252);
  2186.     loc.getRegion().perim = p;
  2187.         initLocsFromRegion(loc, loc.getRegion());
  2188.  
  2189.     // Civil and Mechanical Engineering Lab ----------------------------
  2190.     loc = new Building(this,  new Point(300,230));
  2191.     loc.setName("Civil/Mechanical Eng. Lab");
  2192.     loc.setURL("http://www.apsc.ubc.ca/");
  2193.     loc.initKeywords();
  2194.     loc.setInfoText("Civil/Mechanical Engineering Lab,\n"+
  2195.         "2246 Main Mall");
  2196.     p = new Polygon();
  2197.     p.addPoint(298, 225);
  2198.     p.addPoint(303, 225);
  2199.     p.addPoint(302, 227);
  2200.     p.addPoint(305, 227);
  2201.     p.addPoint(305, 252);
  2202.     p.addPoint(297, 252);
  2203.     p.addPoint(297, 234);
  2204.     p.addPoint(290, 234);
  2205.     p.addPoint(290, 229);
  2206.     p.addPoint(295, 229);
  2207.     p.addPoint(298, 230);
  2208.     loc.getRegion().perim = p;
  2209.         initLocsFromRegion(loc, loc.getRegion());
  2210.  
  2211.     // Civil and Mechanical Engineering  ----------------------------
  2212.     loc = new Building(this,  new Point(315,230));
  2213.     loc.setName("Civil & Mechanical Engineering");
  2214.     loc.setURL("http://www.civil.ubc.ca/");
  2215.     loc.initKeywords();
  2216.     loc.setInfoText("Civil and Mechanical Engineering Building,\n"+
  2217.         "2246 Main Mall,\n"+
  2218.         "\n        Contains:\n\n");
  2219.     loc.appendtoInfoText("Civil Engineering Department");
  2220.     loc.appendtoInfoText("Faculty of Applied Science");
  2221.     loc.appendtoInfoText("Mechanical Engineering Department");
  2222.     p = new Polygon();
  2223.     p.addPoint(310, 226);
  2224.     p.addPoint(326, 226);
  2225.     p.addPoint(326, 229);
  2226.     p.addPoint(324, 229);
  2227.     p.addPoint(324, 232);
  2228.     p.addPoint(317, 232);
  2229.     p.addPoint(317, 240);
  2230.     p.addPoint(331, 240);
  2231.     p.addPoint(331, 246);
  2232.     p.addPoint(316, 246);
  2233.     p.addPoint(316, 265);
  2234.     p.addPoint(305, 265);
  2235.     p.addPoint(305, 262);
  2236.     p.addPoint(304, 262);
  2237.     p.addPoint(304, 257);
  2238.     p.addPoint(314, 257);
  2239.     p.addPoint(314, 254);
  2240.     p.addPoint(310, 254);
  2241.     loc.getRegion().perim = p;
  2242.         initLocsFromRegion(loc, loc.getRegion());
  2243.  
  2244.     // Pulp and Paper Center  ----------------------------
  2245.     loc = new Building(this,  new Point(335,230));
  2246.     loc.setName("Pulp and Paper Center");
  2247.     loc.initKeywords();
  2248.     loc.setInfoText("Pulp and Paper Center,\n"+
  2249.         "2385 East Mall,\n");
  2250.     p = new Polygon();
  2251.     p.addPoint(350, 228);
  2252.     p.addPoint(353, 228);
  2253.     p.addPoint(353, 226);
  2254.     p.addPoint(357, 226);
  2255.     p.addPoint(357, 228);
  2256.     p.addPoint(359, 228);
  2257.     p.addPoint(359, 240);
  2258.     p.addPoint(352, 240);
  2259.     p.addPoint(352, 238);
  2260.     p.addPoint(350, 238);
  2261.     loc.getRegion().perim = p;
  2262.         initLocsFromRegion(loc, loc.getRegion());
  2263.  
  2264.  
  2265. /*======================================================================
  2266.                ROADS & THINGS
  2267.   ======================================================================*/
  2268.     // B-lot 1 --------------------------------------------------
  2269.     loc = new Road(this, 370, 145);
  2270.     loc.setDisplayable(true);
  2271.     loc.setName("B-1 Lot");
  2272.     loc.initKeywords();
  2273.     loc.setInfoText("B-1 Parking Lot");
  2274.     loc.addKeyword("Public Parking");
  2275.     p = new Polygon();
  2276.     p.addPoint(365, 139);
  2277.     p.addPoint(387, 140);
  2278.     p.addPoint(387, 178);
  2279.     p.addPoint(378, 178);
  2280.     p.addPoint(378, 195);
  2281.     p.addPoint(365, 195);
  2282.     loc.getRegion().perim = p;
  2283.         initLocsFromRegion(loc, loc.getRegion());
  2284.  
  2285.     // B-lot 4 --------------------------------------------------
  2286.     loc = new Road(this, 370, 280);
  2287.     loc.setDisplayable(true);
  2288.     loc.setName("B-4 Lot");
  2289.     loc.initKeywords();
  2290.     loc.setInfoText("B-4 Parking Lot");
  2291.     loc.addKeyword("Public Parking");
  2292.     p = new Polygon();
  2293.     p.addPoint(363, 275);
  2294.     p.addPoint(378, 275);
  2295.     p.addPoint(378, 295);
  2296.     p.addPoint(364, 295);
  2297.     p.addPoint(364, 293);
  2298.     p.addPoint(366, 293);
  2299.     p.addPoint(366, 277);
  2300.     p.addPoint(362, 277);
  2301.     loc.getRegion().perim = p;
  2302.         initLocsFromRegion(loc, loc.getRegion());
  2303.  
  2304.     // B-lot 5 --------------------------------------------------
  2305.     loc = new Road(this, 410, 235);
  2306.     loc.setDisplayable(true);
  2307.     loc.setName("B-5 Lot");
  2308.     loc.initKeywords();
  2309.     loc.setInfoText("B-5 Parking Lot");
  2310.     loc.addKeyword("Public Parking");
  2311.     p = new Polygon();
  2312.     p.addPoint(406, 230);
  2313.     p.addPoint(447, 230);
  2314.     p.addPoint(448, 246);
  2315.     p.addPoint(450, 246);
  2316.     p.addPoint(450, 250);
  2317.     p.addPoint(448, 250);
  2318.     p.addPoint(448, 266);
  2319.     p.addPoint(405, 266);
  2320.     p.addPoint(406, 250);
  2321.     p.addPoint(402, 250);
  2322.     p.addPoint(402, 247);
  2323.     p.addPoint(406, 247);
  2324.     loc.getRegion().perim = p;
  2325.         initLocsFromRegion(loc, loc.getRegion());
  2326.  
  2327.     // B-lot 6 --------------------------------------------------
  2328.     loc = new Road(this, 405, 285);
  2329.     loc.setDisplayable(true);
  2330.     loc.setName("B-6 Lot");
  2331.     loc.initKeywords();
  2332.     loc.setInfoText("B-6 Parking Lot");
  2333.     loc.addKeyword("Public Parking");
  2334.     p = new Polygon();
  2335.     p.addPoint(404, 286);
  2336.     p.addPoint(424, 286);
  2337.     p.addPoint(424, 274);
  2338.     p.addPoint(449, 274);
  2339.     p.addPoint(449, 301);
  2340.     p.addPoint(449, 313);
  2341.     p.addPoint(416, 313);
  2342.     p.addPoint(416, 315);
  2343.     p.addPoint(405, 315);
  2344.     loc.getRegion().perim = p;
  2345.         initLocsFromRegion(loc, loc.getRegion());
  2346.  
  2347.     // B-lot 7 --------------------------------------------------
  2348.     loc = new Road(this, 460, 300);
  2349.     loc.setDisplayable(true);
  2350.     loc.setName("B-7 Lot");
  2351.     loc.initKeywords();
  2352.     loc.setInfoText("B-7 Parking Lot");
  2353.     loc.addKeyword("Public Parking");
  2354.     p = new Polygon();
  2355.     p.addPoint(455, 297);
  2356.     p.addPoint(488, 297);
  2357.     p.addPoint(488, 288);
  2358.     p.addPoint(500, 287);
  2359.     p.addPoint(500, 299);
  2360.     p.addPoint(487, 309);
  2361.     p.addPoint(455, 309);
  2362.     loc.getRegion().perim = p;
  2363.         initLocsFromRegion(loc, loc.getRegion());
  2364.  
  2365.     // Agricultural road --------------------------------------------------
  2366.     loc = new Road(this, 187, 225);
  2367.     loc.setDisplayable(true);
  2368.     loc.setName("Agricultural Road");
  2369.     loc.initKeywords();
  2370.     loc.addKeyword("Agricultural Road");
  2371.     p = new Polygon();
  2372.     p.addPoint(187,225);
  2373.     p.addPoint(192,225);
  2374.     p.addPoint(192,315);
  2375.     p.addPoint(187,315);
  2376.     loc.getRegion().perim = p;
  2377.         initLocsFromRegion(loc, loc.getRegion());
  2378.  
  2379.     // Mathematics Road --------------------------------------------------
  2380.     loc = new Road(this, 165, 300);
  2381.     loc.setDisplayable(true);
  2382.     loc.setName("Mathematics Road");
  2383.     loc.initKeywords();
  2384.     loc.addKeyword("Mathematics Road");
  2385.     p = new Polygon();
  2386.     p.addPoint(163, 300);
  2387.     p.addPoint(190, 300);
  2388.     p.addPoint(190, 303);
  2389.     p.addPoint(163, 303);
  2390.     loc.getRegion().perim = p;
  2391.         initLocsFromRegion(loc, loc.getRegion());
  2392.  
  2393.     // East Mall --------------------------------------------------
  2394.     loc = new Road(this, 95, 218);
  2395.     loc.setDisplayable(true);
  2396.     loc.setName("East Mall");
  2397.     loc.initKeywords();
  2398.     loc.addKeyword("East Mall");
  2399.     p = new Polygon();
  2400.     p.addPoint(95, 218);
  2401.     p.addPoint(360, 218);
  2402.     p.addPoint(360,224);
  2403.     p.addPoint(95, 224);
  2404.     loc.getRegion().perim = p;
  2405.         initLocsFromRegion(loc, loc.getRegion());
  2406.  
  2407.     // Main Mall --------------------------------------------------
  2408.     loc = new Road(this, 115, 265);
  2409.     loc.setDisplayable(true);
  2410.     loc.setName("Main Mall");
  2411.     loc.initKeywords();
  2412.     loc.addKeyword("Main Mall");
  2413.     p = new Polygon();
  2414.     p.addPoint(115, 266);
  2415.     p.addPoint(360, 266);
  2416.     p.addPoint(360, 274);
  2417.     p.addPoint(115, 274);
  2418.     loc.getRegion().perim = p;
  2419.         initLocsFromRegion(loc, loc.getRegion());
  2420.  
  2421.     // West Mall  --------------------------------------------------
  2422.     loc = new Road(this, 187, 225);
  2423.     loc.setDisplayable(true);
  2424.     loc.setName("West Mall");
  2425.     loc.initKeywords();
  2426.     loc.addKeyword("West Mall");
  2427.     p = new Polygon();
  2428.     p.addPoint(110, 314);
  2429.     p.addPoint(285, 315);
  2430.     p.addPoint(303, 322);
  2431.     p.addPoint(345, 322);
  2432.     p.addPoint(352, 319);
  2433.     p.addPoint(398, 319);
  2434.     p.addPoint(404, 317);
  2435.     p.addPoint(476, 316);
  2436.     p.addPoint(485, 318);
  2437.     p.addPoint(492, 325);
  2438.     p.addPoint(496, 332);
  2439.     p.addPoint(498, 340);
  2440.     p.addPoint(500, 346);
  2441.     p.addPoint(491, 346);
  2442.     p.addPoint(489, 336);
  2443.     p.addPoint(487, 331);
  2444.     p.addPoint(484, 328);
  2445.     p.addPoint(477, 324);
  2446.     p.addPoint(468, 324);
  2447.     p.addPoint(400, 323);
  2448.     p.addPoint(395, 323);
  2449.     p.addPoint(353, 322);
  2450.     p.addPoint(348, 325);
  2451.     p.addPoint(301, 326);
  2452.     p.addPoint(286, 318);
  2453.     p.addPoint(151, 318);
  2454.     p.addPoint(146, 316);
  2455.     p.addPoint(110, 317);
  2456.     loc.getRegion().perim = p;
  2457.         initLocsFromRegion(loc, loc.getRegion());
  2458.  
  2459.     // Note:  this must go after Main mall, since the region overlaps -
  2460.     // the building is underground.
  2461.     // Sedgewick Undergraduate Library ----------------------------
  2462.     loc = new Building(this,  new Point(155, 265));
  2463.     loc.setDisplayable(true);
  2464.     loc.setName("Sedgewick Library");
  2465.     loc.setURL("http://www.library.ubc.ca");
  2466.     loc.initKeywords();
  2467.     loc.setInfoText("Sedgewick Library,\n"+
  2468.         "1958 Main Mall,\n" +
  2469.         "(Underground)\n" +
  2470.         "\n        Contains:\n\n");
  2471.     loc.appendtoInfoText("Wilson Recording Library");
  2472.     loc.addKeyword("Cafeteria");
  2473.     p = new Polygon();
  2474.     p.addPoint(156, 264);
  2475.     p.addPoint(184, 264);
  2476.     p.addPoint(184, 274);
  2477.     p.addPoint(156, 274);
  2478.     loc.getRegion().perim = p;
  2479.         initLocsFromRegion(loc, loc.getRegion());
  2480.  
  2481.     return true;
  2482.     }
  2483. }
  2484.  
  2485.